diff --git a/.example.env b/.example.env index e1e83b12..9ce95ac7 100644 --- a/.example.env +++ b/.example.env @@ -1,16 +1,7 @@ -ETHERSCAN_API_KEY= -OPTIMISTIC_ETHERSCAN_API_KEY= -POLYSCAN_API_KEY= +# https://www.sphinx.dev/ +SPHINX_API_KEY= -# the deployer address, when using a ledger or a seed phrase -SENDER_ETHEREUM_MAINNET= -SENDER_ETHEREUM_SEPOLIA= -SENDER_OPTIMISM_MAINNET= -SENDER_OPTIMISM_SEPOLIA= -SENDER_POLYGON_MAINNET= -SENDER_POLYGON_MUMBAI= - -# public rpc: +# public rpc (these defaults might have too low of a rate limit): RPC_ETHEREUM_MAINNET="https://rpc.ankr.com/eth" RPC_ETHEREUM_SEPOLIA="https://rpc.ankr.com/eth_sepolia" RPC_OPTIMISM_MAINNET="https://rpc.ankr.com/optimism" diff --git a/.github/workflows/deploy_testnet.yml.disabled b/.github/workflows/deploy_testnet.yml.disabled new file mode 100644 index 00000000..67350b1b --- /dev/null +++ b/.github/workflows/deploy_testnet.yml.disabled @@ -0,0 +1,33 @@ +# name: Sphinx Dry Run +# env: +# SPHINX_API_KEY: ${{ secrets.SPHINX_API_KEY }} +# RPC_ETHEREUM_MAINNET: "https://rpc.ankr.com/eth" +# RPC_ETHEREUM_SEPOLIA: "https://eth-sepolia.g.alchemy.com/v2/${{ secrets.ALCHEMY_API_KEY }}" +# RPC_OPTIMISM_MAINNET: "https://rpc.ankr.com/optimism" +# RPC_OPTIMISM_SEPOLIA: "https://opt-sepolia.g.alchemy.com/v2/${{ secrets.ALCHEMY_API_KEY }}" +# RPC_POLYGON_MAINNET: "https://rpc.ankr.com/polygon" +# RPC_POLYGON_MUMBAI: "https://polygon-mumbai.g.alchemy.com/v2/${{ secrets.ALCHEMY_API_KEY }}" + +# # Trigger the dry run when a pull request is opened or updated. +# on: pull_request + +# jobs: +# sphinx-dry-run: +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v4 +# with: +# submodules: recursive +# - uses: actions/setup-node@v4 +# with: +# node-version: latest +# - name: Install npm dependencies +# run: npm ci +# - name: Install Foundry +# uses: foundry-rs/foundry-toolchain@v1 +# with: +# version: nightly +# # - name: Install Sphinx Solidity Library +# # run: npx sphinx install +# - name: Dry Run +# run: npx sphinx propose script/Deploy.s.sol --dry-run --networks testnets \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 888d42dc..9cac08ea 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "lib/forge-std"] path = lib/forge-std url = https://github.com/foundry-rs/forge-std +[submodule "lib/sphinx"] + path = lib/sphinx + url = https://github.com/sphinx-labs/sphinx diff --git a/deployments/compiler-inputs/b2112d617c776ac2cceb92d11c578094.json b/deployments/compiler-inputs/b2112d617c776ac2cceb92d11c578094.json new file mode 100644 index 00000000..cae737df --- /dev/null +++ b/deployments/compiler-inputs/b2112d617c776ac2cceb92d11c578094.json @@ -0,0 +1,410 @@ +{ + "solcVersion": "0.8.23", + "solcLongVersion": "0.8.23+commit.f704f362", + "id": "b2112d617c776ac2cceb92d11c578094", + "input": { + "language": "Solidity", + "settings": { + "viaIR": false, + "optimizer": { + "runs": 200, + "enabled": true + }, + "metadata": { + "useLiteralContent": false, + "bytecodeHash": "ipfs", + "appendCBOR": true + }, + "outputSelection": { + "*": { + "": [ + "ast" + ], + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ] + } + }, + "evmVersion": "paris", + "libraries": {}, + "remappings": [ + "@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/", + "@bananapus/=node_modules/@bananapus/", + "@chainlink/=node_modules/@chainlink/", + "@eth-optimism/=node_modules/@eth-optimism/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/=node_modules/@prb/", + "@uniswap/=node_modules/@uniswap/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "forge-std/=lib/forge-std/src/", + "hardhat/=node_modules/hardhat/", + "solmate/=node_modules/solmate/", + "sphinx-forge-std/=node_modules/sphinx-forge-std/", + "sphinx-solmate/=node_modules/sphinx-solmate/", + "sphinx/=lib/sphinx/" + ] + }, + "sources": { + "node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.0;\n\n/// @notice Permission IDs for `JBPermissions`, used throughout the Bananapus ecosystem.\nlibrary JBPermissionIds {\n // nana-core\n uint256 internal constant ROOT = 1;\n uint256 internal constant QUEUE_RULESETS = 2;\n uint256 internal constant REDEEM_TOKENS = 3;\n uint256 internal constant MIGRATE_CONTROLLER = 4;\n uint256 internal constant MIGRATE_TERMINAL = 5;\n uint256 internal constant PROCESS_FEES = 6;\n uint256 internal constant SET_PROJECT_METADATA = 7;\n uint256 internal constant ISSUE_TOKEN = 8;\n uint256 internal constant SET_TOKEN = 9;\n uint256 internal constant MINT_TOKENS = 10;\n uint256 internal constant BURN_TOKENS = 11;\n uint256 internal constant CLAIM_TOKENS = 12;\n uint256 internal constant TRANSFER_TOKENS = 13;\n uint256 internal constant SET_CONTROLLER = 14;\n uint256 internal constant SET_TERMINALS = 15;\n uint256 internal constant SET_PRIMARY_TERMINAL = 16;\n uint256 internal constant USE_ALLOWANCE = 17;\n uint256 internal constant SET_SPLITS = 18;\n uint256 internal constant ADD_PRICE_FEED = 19;\n uint256 internal constant SET_ACCOUNTING_CONTEXT = 20;\n // nana-project-handles\n uint256 internal constant SET_ENS_NAME_FOR = 21;\n // nana-721-hook\n uint256 internal constant ADJUST_721_TIERS = 22;\n uint256 internal constant UPDATE_721_METADATA = 23;\n uint256 internal constant MINT_721 = 24;\n // nana-buyback-hook\n uint256 internal constant SET_BUYBACK_POOL_PARAMS = 25;\n uint256 internal constant CHANGE_BUYBACK_POOL = 26;\n // nana-swap-terminal\n uint256 internal constant MODIFY_DEFAULT_SWAP_TERMINAL_POOL = 27;\n uint256 internal constant MODIFY_SWAP_TERMINAL_TWAP_PARAMS = 28;\n // nana-suckers\n uint256 internal constant MAP_SUCKER_TOKEN = 29;\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "src/JBPermissions.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {JBPermissionIds} from \"@bananapus/permission-ids/src/JBPermissionIds.sol\";\nimport {JBPermissioned} from \"./abstract/JBPermissioned.sol\";\nimport {IJBPermissions} from \"./interfaces/IJBPermissions.sol\";\nimport {JBPermissionsData} from \"./structs/JBPermissionsData.sol\";\n\n/// @notice Stores permissions for all addresses and operators. Addresses can give permissions to any other address\n/// (i.e. an *operator*) to execute specific operations on their behalf.\ncontract JBPermissions is JBPermissioned, IJBPermissions {\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n error PERMISSION_ID_OUT_OF_BOUNDS();\n\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice The permissions that an operator has been given by an account for a specific project.\n /// @dev An account can give an operator permissions that only pertain to a specific project ID.\n /// @dev There is no project with a ID of 0 – this ID is a wildcard which gives an operator permissions pertaining\n /// to *all* project IDs on an account's behalf. Use this with caution.\n /// @dev Permissions are stored in a packed `uint256`. Each of the 256 bits represents the on/off state of a\n /// permission. Applications can specify the significance of each permission ID.\n /// @custom:param operator The address of the operator.\n /// @custom:param account The address of the account being operated on behalf of.\n /// @custom:param projectId The project ID the permissions are scoped to. An ID of 0 grants permissions across all\n /// projects.\n mapping(address operator => mapping(address account => mapping(uint256 projectId => uint256))) public override\n permissionsOf;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice Check if an operator has a specific permission for a specific address and project ID.\n /// @param operator The operator to check.\n /// @param account The account being operated on behalf of.\n /// @param projectId The project ID that the operator has permission to operate under. 0 represents all projects.\n /// @param permissionId The permission ID to check for.\n /// @return A flag indicating whether the operator has the specified permission.\n function hasPermission(\n address operator,\n address account,\n uint256 projectId,\n uint256 permissionId\n )\n external\n view\n override\n returns (bool)\n {\n if (permissionId > 255) revert PERMISSION_ID_OUT_OF_BOUNDS();\n\n return (((permissionsOf[operator][account][projectId] >> permissionId) & 1) == 1);\n }\n\n /// @notice Check if an operator has all of the specified permissions for a specific address and project ID.\n /// @param operator The operator to check.\n /// @param account The account being operated on behalf of.\n /// @param projectId The project ID that the operator has permission to operate under. 0 represents all projects.\n /// @param permissionIds An array of permission IDs to check for.\n /// @return A flag indicating whether the operator has all specified permissions.\n function hasPermissions(\n address operator,\n address account,\n uint256 projectId,\n uint256[] calldata permissionIds\n )\n external\n view\n override\n returns (bool)\n {\n // Keep a reference to the number of permissions being iterated on.\n uint256 numberOfPermissions = permissionIds.length;\n\n // Keep a reference to the permission being iterated on.\n uint256 permissionId;\n\n for (uint256 i; i < numberOfPermissions; i++) {\n // Set the permission being iterated on.\n permissionId = permissionIds[i];\n\n if (permissionId > 255) revert PERMISSION_ID_OUT_OF_BOUNDS();\n\n if (((permissionsOf[operator][account][projectId] >> permissionId) & 1) == 0) {\n return false;\n }\n }\n return true;\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n constructor() JBPermissioned(this) {}\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Sets permissions for an operator.\n /// @dev Only an address can give permissions to or revoke permissions from its operators.\n /// @param account The account setting its operators' permissions.\n /// @param permissionsData The data which specifies the permissions the operator is being given.\n function setPermissionsFor(address account, JBPermissionsData calldata permissionsData) external override {\n // Enforce permissions.\n _requirePermissionFrom({\n account: account,\n projectId: permissionsData.projectId,\n permissionId: JBPermissionIds.ROOT\n });\n\n // Pack the permission IDs into a uint256.\n uint256 packed = _packedPermissions(permissionsData.permissionIds);\n\n // Store the new value.\n permissionsOf[permissionsData.operator][account][permissionsData.projectId] = packed;\n\n emit OperatorPermissionsSet(\n permissionsData.operator,\n account,\n permissionsData.projectId,\n permissionsData.permissionIds,\n packed,\n msg.sender\n );\n }\n\n //*********************************************************************//\n // --------------------- internal helper functions ------------------- //\n //*********************************************************************//\n\n /// @notice Converts an array of permission IDs to a packed `uint256`.\n /// @param permissionIds The IDs of the permissions to pack.\n /// @return packed The packed value.\n function _packedPermissions(uint256[] calldata permissionIds) internal pure returns (uint256 packed) {\n // Keep a reference to the number of IDs being iterated on.\n uint256 numberOfIds = permissionIds.length;\n\n // Keep a reference to the permission being iterated on.\n uint256 permissionId;\n\n for (uint256 i; i < numberOfIds; i++) {\n // Set the permission being iterated on.\n permissionId = permissionIds[i];\n\n if (permissionId > 255) revert PERMISSION_ID_OUT_OF_BOUNDS();\n\n // Turn on the bit at the ID.\n packed |= 1 << permissionId;\n }\n }\n}\n" + }, + "src/abstract/JBPermissioned.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {Context} from \"@openzeppelin/contracts/utils/Context.sol\";\nimport {IJBPermissioned} from \"./../interfaces/IJBPermissioned.sol\";\nimport {IJBPermissions} from \"./../interfaces/IJBPermissions.sol\";\n\n/// @notice Modifiers to allow access to transactions based on which permissions the message's sender has.\nabstract contract JBPermissioned is Context, IJBPermissioned {\n //*********************************************************************//\n // --------------------------- custom errors -------------------------- //\n //*********************************************************************//\n error UNAUTHORIZED();\n\n //*********************************************************************//\n // ---------------- public immutable stored properties --------------- //\n //*********************************************************************//\n\n /// @notice A contract storing permissions.\n IJBPermissions public immutable override PERMISSIONS;\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param permissions A contract storing permissions.\n constructor(IJBPermissions permissions) {\n PERMISSIONS = permissions;\n }\n\n //*********************************************************************//\n // -------------------------- internal views ------------------------- //\n //*********************************************************************//\n\n /// @notice Require the message sender to be the account or have the relevant permission.\n /// @param account The account to allow.\n /// @param projectId The project ID to check the permission under.\n /// @param permissionId The required permission ID. The operator must have this permission within the specified\n /// project ID.\n function _requirePermissionFrom(address account, uint256 projectId, uint256 permissionId) internal view {\n address sender = _msgSender();\n if (\n sender != account && !PERMISSIONS.hasPermission(sender, account, projectId, permissionId)\n && !PERMISSIONS.hasPermission(sender, account, 0, permissionId)\n ) revert UNAUTHORIZED();\n }\n\n /// @notice If the 'alsoGrantAccessIf' condition is truthy, proceed. Otherwise, require the message sender to be the\n /// account or\n /// have the relevant permission.\n /// @param account The account to allow.\n /// @param projectId The project ID to check the permission under.\n /// @param permissionId The required permission ID. The operator must have this permission within the specified\n /// project ID.\n /// @param alsoGrantAccessIf An override condition which will allow access regardless of permissions.\n function _requirePermissionAllowingOverrideFrom(\n address account,\n uint256 projectId,\n uint256 permissionId,\n bool alsoGrantAccessIf\n )\n internal\n view\n {\n if (alsoGrantAccessIf) return;\n _requirePermissionFrom(account, projectId, permissionId);\n }\n}\n" + }, + "src/interfaces/IJBPermissioned.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBPermissions} from \"./IJBPermissions.sol\";\n\ninterface IJBPermissioned {\n function PERMISSIONS() external view returns (IJBPermissions);\n}\n" + }, + "src/interfaces/IJBPermissions.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBPermissionsData} from \"./../structs/JBPermissionsData.sol\";\n\ninterface IJBPermissions {\n event OperatorPermissionsSet(\n address indexed operator,\n address indexed account,\n uint256 indexed projectId,\n uint256[] permissionIds,\n uint256 packed,\n address caller\n );\n\n function permissionsOf(address operator, address account, uint256 projectId) external view returns (uint256);\n\n function hasPermission(\n address operator,\n address account,\n uint256 projectId,\n uint256 permissionId\n )\n external\n view\n returns (bool);\n\n function hasPermissions(\n address operator,\n address account,\n uint256 projectId,\n uint256[] calldata permissionIds\n )\n external\n view\n returns (bool);\n\n function setPermissionsFor(address account, JBPermissionsData calldata permissionsData) external;\n}\n" + }, + "src/structs/JBPermissionsData.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @custom:member operator The address that permissions are being given to.\n/// @custom:member projectId The ID of the project the operator is being given permissions for. Operators only have\n/// permissions under this project's scope. An ID of 0 is a wildcard, which gives an operator permissions across all\n/// projects.\n/// @custom:member permissionIds The IDs of the permissions being given. See the `JBPermissionIds` library.\nstruct JBPermissionsData {\n address operator;\n uint256 projectId;\n uint256[] permissionIds;\n}\n" + }, + "node_modules/@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (governance/utils/IVotes.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Common interface for {ERC20Votes}, {ERC721Votes}, and other {Votes}-enabled contracts.\n */\ninterface IVotes {\n /**\n * @dev The signature used has expired.\n */\n error VotesExpiredSignature(uint256 expiry);\n\n /**\n * @dev Emitted when an account changes their delegate.\n */\n event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);\n\n /**\n * @dev Emitted when a token transfer or delegate change results in changes to a delegate's number of voting units.\n */\n event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes);\n\n /**\n * @dev Returns the current amount of votes that `account` has.\n */\n function getVotes(address account) external view returns (uint256);\n\n /**\n * @dev Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is\n * configured to use block numbers, this will return the value at the end of the corresponding block.\n */\n function getPastVotes(address account, uint256 timepoint) external view returns (uint256);\n\n /**\n * @dev Returns the total supply of votes available at a specific moment in the past. If the `clock()` is\n * configured to use block numbers, this will return the value at the end of the corresponding block.\n *\n * NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes.\n * Votes that have not been delegated are still part of total supply, even though they would not participate in a\n * vote.\n */\n function getPastTotalSupply(uint256 timepoint) external view returns (uint256);\n\n /**\n * @dev Returns the delegate that `account` has chosen.\n */\n function delegates(address account) external view returns (address);\n\n /**\n * @dev Delegates votes from the sender to `delegatee`.\n */\n function delegate(address delegatee) external;\n\n /**\n * @dev Delegates votes from signer to `delegatee`.\n */\n function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external;\n}\n" + }, + "node_modules/@openzeppelin/contracts/governance/utils/Votes.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (governance/utils/Votes.sol)\npragma solidity ^0.8.20;\n\nimport {IERC5805} from \"../../interfaces/IERC5805.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {Nonces} from \"../../utils/Nonces.sol\";\nimport {EIP712} from \"../../utils/cryptography/EIP712.sol\";\nimport {Checkpoints} from \"../../utils/structs/Checkpoints.sol\";\nimport {SafeCast} from \"../../utils/math/SafeCast.sol\";\nimport {ECDSA} from \"../../utils/cryptography/ECDSA.sol\";\nimport {Time} from \"../../utils/types/Time.sol\";\n\n/**\n * @dev This is a base abstract contract that tracks voting units, which are a measure of voting power that can be\n * transferred, and provides a system of vote delegation, where an account can delegate its voting units to a sort of\n * \"representative\" that will pool delegated voting units from different accounts and can then use it to vote in\n * decisions. In fact, voting units _must_ be delegated in order to count as actual votes, and an account has to\n * delegate those votes to itself if it wishes to participate in decisions and does not have a trusted representative.\n *\n * This contract is often combined with a token contract such that voting units correspond to token units. For an\n * example, see {ERC721Votes}.\n *\n * The full history of delegate votes is tracked on-chain so that governance protocols can consider votes as distributed\n * at a particular block number to protect against flash loans and double voting. The opt-in delegate system makes the\n * cost of this history tracking optional.\n *\n * When using this module the derived contract must implement {_getVotingUnits} (for example, make it return\n * {ERC721-balanceOf}), and can use {_transferVotingUnits} to track a change in the distribution of those units (in the\n * previous example, it would be included in {ERC721-_update}).\n */\nabstract contract Votes is Context, EIP712, Nonces, IERC5805 {\n using Checkpoints for Checkpoints.Trace208;\n\n bytes32 private constant DELEGATION_TYPEHASH =\n keccak256(\"Delegation(address delegatee,uint256 nonce,uint256 expiry)\");\n\n mapping(address account => address) private _delegatee;\n\n mapping(address delegatee => Checkpoints.Trace208) private _delegateCheckpoints;\n\n Checkpoints.Trace208 private _totalCheckpoints;\n\n /**\n * @dev The clock was incorrectly modified.\n */\n error ERC6372InconsistentClock();\n\n /**\n * @dev Lookup to future votes is not available.\n */\n error ERC5805FutureLookup(uint256 timepoint, uint48 clock);\n\n /**\n * @dev Clock used for flagging checkpoints. Can be overridden to implement timestamp based\n * checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match.\n */\n function clock() public view virtual returns (uint48) {\n return Time.blockNumber();\n }\n\n /**\n * @dev Machine-readable description of the clock as specified in EIP-6372.\n */\n // solhint-disable-next-line func-name-mixedcase\n function CLOCK_MODE() public view virtual returns (string memory) {\n // Check that the clock was not modified\n if (clock() != Time.blockNumber()) {\n revert ERC6372InconsistentClock();\n }\n return \"mode=blocknumber&from=default\";\n }\n\n /**\n * @dev Returns the current amount of votes that `account` has.\n */\n function getVotes(address account) public view virtual returns (uint256) {\n return _delegateCheckpoints[account].latest();\n }\n\n /**\n * @dev Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is\n * configured to use block numbers, this will return the value at the end of the corresponding block.\n *\n * Requirements:\n *\n * - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\n */\n function getPastVotes(address account, uint256 timepoint) public view virtual returns (uint256) {\n uint48 currentTimepoint = clock();\n if (timepoint >= currentTimepoint) {\n revert ERC5805FutureLookup(timepoint, currentTimepoint);\n }\n return _delegateCheckpoints[account].upperLookupRecent(SafeCast.toUint48(timepoint));\n }\n\n /**\n * @dev Returns the total supply of votes available at a specific moment in the past. If the `clock()` is\n * configured to use block numbers, this will return the value at the end of the corresponding block.\n *\n * NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes.\n * Votes that have not been delegated are still part of total supply, even though they would not participate in a\n * vote.\n *\n * Requirements:\n *\n * - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\n */\n function getPastTotalSupply(uint256 timepoint) public view virtual returns (uint256) {\n uint48 currentTimepoint = clock();\n if (timepoint >= currentTimepoint) {\n revert ERC5805FutureLookup(timepoint, currentTimepoint);\n }\n return _totalCheckpoints.upperLookupRecent(SafeCast.toUint48(timepoint));\n }\n\n /**\n * @dev Returns the current total supply of votes.\n */\n function _getTotalSupply() internal view virtual returns (uint256) {\n return _totalCheckpoints.latest();\n }\n\n /**\n * @dev Returns the delegate that `account` has chosen.\n */\n function delegates(address account) public view virtual returns (address) {\n return _delegatee[account];\n }\n\n /**\n * @dev Delegates votes from the sender to `delegatee`.\n */\n function delegate(address delegatee) public virtual {\n address account = _msgSender();\n _delegate(account, delegatee);\n }\n\n /**\n * @dev Delegates votes from signer to `delegatee`.\n */\n function delegateBySig(\n address delegatee,\n uint256 nonce,\n uint256 expiry,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) public virtual {\n if (block.timestamp > expiry) {\n revert VotesExpiredSignature(expiry);\n }\n address signer = ECDSA.recover(\n _hashTypedDataV4(keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry))),\n v,\n r,\n s\n );\n _useCheckedNonce(signer, nonce);\n _delegate(signer, delegatee);\n }\n\n /**\n * @dev Delegate all of `account`'s voting units to `delegatee`.\n *\n * Emits events {IVotes-DelegateChanged} and {IVotes-DelegateVotesChanged}.\n */\n function _delegate(address account, address delegatee) internal virtual {\n address oldDelegate = delegates(account);\n _delegatee[account] = delegatee;\n\n emit DelegateChanged(account, oldDelegate, delegatee);\n _moveDelegateVotes(oldDelegate, delegatee, _getVotingUnits(account));\n }\n\n /**\n * @dev Transfers, mints, or burns voting units. To register a mint, `from` should be zero. To register a burn, `to`\n * should be zero. Total supply of voting units will be adjusted with mints and burns.\n */\n function _transferVotingUnits(address from, address to, uint256 amount) internal virtual {\n if (from == address(0)) {\n _push(_totalCheckpoints, _add, SafeCast.toUint208(amount));\n }\n if (to == address(0)) {\n _push(_totalCheckpoints, _subtract, SafeCast.toUint208(amount));\n }\n _moveDelegateVotes(delegates(from), delegates(to), amount);\n }\n\n /**\n * @dev Moves delegated votes from one delegate to another.\n */\n function _moveDelegateVotes(address from, address to, uint256 amount) private {\n if (from != to && amount > 0) {\n if (from != address(0)) {\n (uint256 oldValue, uint256 newValue) = _push(\n _delegateCheckpoints[from],\n _subtract,\n SafeCast.toUint208(amount)\n );\n emit DelegateVotesChanged(from, oldValue, newValue);\n }\n if (to != address(0)) {\n (uint256 oldValue, uint256 newValue) = _push(\n _delegateCheckpoints[to],\n _add,\n SafeCast.toUint208(amount)\n );\n emit DelegateVotesChanged(to, oldValue, newValue);\n }\n }\n }\n\n /**\n * @dev Get number of checkpoints for `account`.\n */\n function _numCheckpoints(address account) internal view virtual returns (uint32) {\n return SafeCast.toUint32(_delegateCheckpoints[account].length());\n }\n\n /**\n * @dev Get the `pos`-th checkpoint for `account`.\n */\n function _checkpoints(\n address account,\n uint32 pos\n ) internal view virtual returns (Checkpoints.Checkpoint208 memory) {\n return _delegateCheckpoints[account].at(pos);\n }\n\n function _push(\n Checkpoints.Trace208 storage store,\n function(uint208, uint208) view returns (uint208) op,\n uint208 delta\n ) private returns (uint208, uint208) {\n return store.push(clock(), op(store.latest(), delta));\n }\n\n function _add(uint208 a, uint208 b) private pure returns (uint208) {\n return a + b;\n }\n\n function _subtract(uint208 a, uint208 b) private pure returns (uint208) {\n return a - b;\n }\n\n /**\n * @dev Must return the voting units held by an account.\n */\n function _getVotingUnits(address) internal view virtual returns (uint256);\n}\n" + }, + "node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\n\npragma solidity ^0.8.20;\n\ninterface IERC5267 {\n /**\n * @dev MAY be emitted to signal that the domain could have changed.\n */\n event EIP712DomainChanged();\n\n /**\n * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n * signature.\n */\n function eip712Domain()\n external\n view\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n );\n}\n" + }, + "node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5805.sol)\n\npragma solidity ^0.8.20;\n\nimport {IVotes} from \"../governance/utils/IVotes.sol\";\nimport {IERC6372} from \"./IERC6372.sol\";\n\ninterface IERC5805 is IERC6372, IVotes {}\n" + }, + "node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC6372.sol)\n\npragma solidity ^0.8.20;\n\ninterface IERC6372 {\n /**\n * @dev Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting).\n */\n function clock() external view returns (uint48);\n\n /**\n * @dev Description of the clock\n */\n // solhint-disable-next-line func-name-mixedcase\n function CLOCK_MODE() external view returns (string memory);\n}\n" + }, + "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721} from \"./IERC721.sol\";\nimport {IERC721Receiver} from \"./IERC721Receiver.sol\";\nimport {IERC721Metadata} from \"./extensions/IERC721Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {Strings} from \"../../utils/Strings.sol\";\nimport {IERC165, ERC165} from \"../../utils/introspection/ERC165.sol\";\nimport {IERC721Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\nabstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {\n using Strings for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n mapping(uint256 tokenId => address) private _owners;\n\n mapping(address owner => uint256) private _balances;\n\n mapping(uint256 tokenId => address) private _tokenApprovals;\n\n mapping(address owner => mapping(address operator => bool)) private _operatorApprovals;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n return\n interfaceId == type(IERC721).interfaceId ||\n interfaceId == type(IERC721Metadata).interfaceId ||\n super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual returns (uint256) {\n if (owner == address(0)) {\n revert ERC721InvalidOwner(address(0));\n }\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual returns (address) {\n return _requireOwned(tokenId);\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual returns (string memory) {\n _requireOwned(tokenId);\n\n string memory baseURI = _baseURI();\n return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenId.toString()) : \"\";\n }\n\n /**\n * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n * by default, can be overridden in child contracts.\n */\n function _baseURI() internal view virtual returns (string memory) {\n return \"\";\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual {\n _approve(to, tokenId, _msgSender());\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual returns (address) {\n _requireOwned(tokenId);\n\n return _getApproved(tokenId);\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual {\n _setApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n // Setting an \"auth\" arguments enables the `_isAuthorized` check which verifies that the token exists\n // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.\n address previousOwner = _update(to, tokenId, _msgSender());\n if (previousOwner != from) {\n revert ERC721IncorrectOwner(from, tokenId, previousOwner);\n }\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual {\n transferFrom(from, to, tokenId);\n _checkOnERC721Received(from, to, tokenId, data);\n }\n\n /**\n * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\n *\n * IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the\n * core ERC721 logic MUST be matched with the use of {_increaseBalance} to keep balances\n * consistent with ownership. The invariant to preserve is that for any address `a` the value returned by\n * `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`.\n */\n function _ownerOf(uint256 tokenId) internal view virtual returns (address) {\n return _owners[tokenId];\n }\n\n /**\n * @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted.\n */\n function _getApproved(uint256 tokenId) internal view virtual returns (address) {\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in\n * particular (ignoring whether it is owned by `owner`).\n *\n * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n * assumption.\n */\n function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) {\n return\n spender != address(0) &&\n (owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender);\n }\n\n /**\n * @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.\n * Reverts if `spender` does not have approval from the provided `owner` for the given token or for all its assets\n * the `spender` for the specific `tokenId`.\n *\n * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n * assumption.\n */\n function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual {\n if (!_isAuthorized(owner, spender, tokenId)) {\n if (owner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n } else {\n revert ERC721InsufficientApproval(spender, tokenId);\n }\n }\n }\n\n /**\n * @dev Unsafe write access to the balances, used by extensions that \"mint\" tokens using an {ownerOf} override.\n *\n * NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that\n * a uint256 would ever overflow from increments when these increments are bounded to uint128 values.\n *\n * WARNING: Increasing an account's balance using this function tends to be paired with an override of the\n * {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership\n * remain consistent with one another.\n */\n function _increaseBalance(address account, uint128 value) internal virtual {\n unchecked {\n _balances[account] += value;\n }\n }\n\n /**\n * @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner\n * (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.\n *\n * The `auth` argument is optional. If the value passed is non 0, then this function will check that\n * `auth` is either the owner of the token, or approved to operate on the token (by the owner).\n *\n * Emits a {Transfer} event.\n *\n * NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}.\n */\n function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) {\n address from = _ownerOf(tokenId);\n\n // Perform (optional) operator check\n if (auth != address(0)) {\n _checkAuthorized(from, auth, tokenId);\n }\n\n // Execute the update\n if (from != address(0)) {\n // Clear approval. No need to re-authorize or emit the Approval event\n _approve(address(0), tokenId, address(0), false);\n\n unchecked {\n _balances[from] -= 1;\n }\n }\n\n if (to != address(0)) {\n unchecked {\n _balances[to] += 1;\n }\n }\n\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n\n return from;\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n address previousOwner = _update(to, tokenId, address(0));\n if (previousOwner != address(0)) {\n revert ERC721InvalidSender(address(0));\n }\n }\n\n /**\n * @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {\n _mint(to, tokenId);\n _checkOnERC721Received(address(0), to, tokenId, data);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n * This is an internal function that does not check if the sender is authorized to operate on the token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal {\n address previousOwner = _update(address(0), tokenId, address(0));\n if (previousOwner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n }\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n address previousOwner = _update(to, tokenId, address(0));\n if (previousOwner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n } else if (previousOwner != from) {\n revert ERC721IncorrectOwner(from, tokenId, previousOwner);\n }\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients\n * are aware of the ERC721 standard to prevent tokens from being forever locked.\n *\n * `data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is like {safeTransferFrom} in the sense that it invokes\n * {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `tokenId` token must exist and be owned by `from`.\n * - `to` cannot be the zero address.\n * - `from` cannot be the zero address.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId) internal {\n _safeTransfer(from, to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {\n _transfer(from, to, tokenId);\n _checkOnERC721Received(from, to, tokenId, data);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is\n * either the owner of the token, or approved to operate on all tokens held by this owner.\n *\n * Emits an {Approval} event.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address to, uint256 tokenId, address auth) internal {\n _approve(to, tokenId, auth, true);\n }\n\n /**\n * @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not\n * emitted in the context of transfers.\n */\n function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual {\n // Avoid reading the owner unless necessary\n if (emitEvent || auth != address(0)) {\n address owner = _requireOwned(tokenId);\n\n // We do not use _isAuthorized because single-token approvals should not be able to call approve\n if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) {\n revert ERC721InvalidApprover(auth);\n }\n\n if (emitEvent) {\n emit Approval(owner, to, tokenId);\n }\n }\n\n _tokenApprovals[tokenId] = to;\n }\n\n /**\n * @dev Approve `operator` to operate on all of `owner` tokens\n *\n * Requirements:\n * - operator can't be the address zero.\n *\n * Emits an {ApprovalForAll} event.\n */\n function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {\n if (operator == address(0)) {\n revert ERC721InvalidOperator(operator);\n }\n _operatorApprovals[owner][operator] = approved;\n emit ApprovalForAll(owner, operator, approved);\n }\n\n /**\n * @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).\n * Returns the owner.\n *\n * Overrides to ownership logic should be done to {_ownerOf}.\n */\n function _requireOwned(uint256 tokenId) internal view returns (address) {\n address owner = _ownerOf(tokenId);\n if (owner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n }\n return owner;\n }\n\n /**\n * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. This will revert if the\n * recipient doesn't accept the token transfer. The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param data bytes optional data to send along with the call\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private {\n if (to.code.length > 0) {\n try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {\n if (retval != IERC721Receiver.onERC721Received.selector) {\n revert ERC721InvalidReceiver(to);\n }\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert ERC721InvalidReceiver(to);\n } else {\n /// @solidity memory-safe-assembly\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n * a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\n * {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n * a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the address zero.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be\n * reverted.\n *\n * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(\n address operator,\n address from,\n uint256 tokenId,\n bytes calldata data\n ) external returns (bytes4);\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721Votes.sol)\n\npragma solidity ^0.8.20;\n\nimport {ERC721} from \"../ERC721.sol\";\nimport {Votes} from \"../../../governance/utils/Votes.sol\";\n\n/**\n * @dev Extension of ERC721 to support voting and delegation as implemented by {Votes}, where each individual NFT counts\n * as 1 vote unit.\n *\n * Tokens do not count as votes until they are delegated, because votes must be tracked which incurs an additional cost\n * on every transfer. Token holders can either delegate to a trusted representative who will decide how to make use of\n * the votes in governance decisions, or they can delegate to themselves to be their own representative.\n */\nabstract contract ERC721Votes is ERC721, Votes {\n /**\n * @dev See {ERC721-_update}. Adjusts votes when tokens are transferred.\n *\n * Emits a {IVotes-DelegateVotesChanged} event.\n */\n function _update(address to, uint256 tokenId, address auth) internal virtual override returns (address) {\n address previousOwner = super._update(to, tokenId, auth);\n\n _transferVotingUnits(previousOwner, to, 1);\n\n return previousOwner;\n }\n\n /**\n * @dev Returns the balance of `account`.\n *\n * WARNING: Overriding this function will likely result in incorrect vote tracking.\n */\n function _getVotingUnits(address account) internal view virtual override returns (uint256) {\n return balanceOf(account);\n }\n\n /**\n * @dev See {ERC721-_increaseBalance}. We need that to account tokens that were minted in batch.\n */\n function _increaseBalance(address account, uint128 amount) internal virtual override {\n super._increaseBalance(account, amount);\n _transferVotingUnits(address(0), account, amount);\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721} from \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/Nonces.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Nonces.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides tracking nonces for addresses. Nonces will only increment.\n */\nabstract contract Nonces {\n /**\n * @dev The nonce used for an `account` is not the expected current nonce.\n */\n error InvalidAccountNonce(address account, uint256 currentNonce);\n\n mapping(address account => uint256) private _nonces;\n\n /**\n * @dev Returns the next unused nonce for an address.\n */\n function nonces(address owner) public view virtual returns (uint256) {\n return _nonces[owner];\n }\n\n /**\n * @dev Consumes a nonce.\n *\n * Returns the current value and increments nonce.\n */\n function _useNonce(address owner) internal virtual returns (uint256) {\n // For each account, the nonce has an initial value of 0, can only be incremented by one, and cannot be\n // decremented or reset. This guarantees that the nonce never overflows.\n unchecked {\n // It is important to do x++ and not ++x here.\n return _nonces[owner]++;\n }\n }\n\n /**\n * @dev Same as {_useNonce} but checking that `nonce` is the next valid for `owner`.\n */\n function _useCheckedNonce(address owner, uint256 nonce) internal virtual {\n uint256 current = _useNonce(owner);\n if (nonce != current) {\n revert InvalidAccountNonce(owner, current);\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/ShortStrings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\n\npragma solidity ^0.8.20;\n\nimport {StorageSlot} from \"./StorageSlot.sol\";\n\n// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |\n// | length | 0x BB |\ntype ShortString is bytes32;\n\n/**\n * @dev This library provides functions to convert short memory strings\n * into a `ShortString` type that can be used as an immutable variable.\n *\n * Strings of arbitrary length can be optimized using this library if\n * they are short enough (up to 31 bytes) by packing them with their\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\n * fallback mechanism can be used for every other case.\n *\n * Usage example:\n *\n * ```solidity\n * contract Named {\n * using ShortStrings for *;\n *\n * ShortString private immutable _name;\n * string private _nameFallback;\n *\n * constructor(string memory contractName) {\n * _name = contractName.toShortStringWithFallback(_nameFallback);\n * }\n *\n * function name() external view returns (string memory) {\n * return _name.toStringWithFallback(_nameFallback);\n * }\n * }\n * ```\n */\nlibrary ShortStrings {\n // Used as an identifier for strings longer than 31 bytes.\n bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\n\n error StringTooLong(string str);\n error InvalidShortString();\n\n /**\n * @dev Encode a string of at most 31 chars into a `ShortString`.\n *\n * This will trigger a `StringTooLong` error is the input string is too long.\n */\n function toShortString(string memory str) internal pure returns (ShortString) {\n bytes memory bstr = bytes(str);\n if (bstr.length > 31) {\n revert StringTooLong(str);\n }\n return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\n }\n\n /**\n * @dev Decode a `ShortString` back to a \"normal\" string.\n */\n function toString(ShortString sstr) internal pure returns (string memory) {\n uint256 len = byteLength(sstr);\n // using `new string(len)` would work locally but is not memory safe.\n string memory str = new string(32);\n /// @solidity memory-safe-assembly\n assembly {\n mstore(str, len)\n mstore(add(str, 0x20), sstr)\n }\n return str;\n }\n\n /**\n * @dev Return the length of a `ShortString`.\n */\n function byteLength(ShortString sstr) internal pure returns (uint256) {\n uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\n if (result > 31) {\n revert InvalidShortString();\n }\n return result;\n }\n\n /**\n * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\n */\n function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\n if (bytes(value).length < 32) {\n return toShortString(value);\n } else {\n StorageSlot.getStringSlot(store).value = value;\n return ShortString.wrap(FALLBACK_SENTINEL);\n }\n }\n\n /**\n * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\n */\n function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return toString(value);\n } else {\n return store;\n }\n }\n\n /**\n * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\n * {setWithFallback}.\n *\n * WARNING: This will return the \"byte length\" of the string. This may not reflect the actual length in terms of\n * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\n */\n function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return byteLength(value);\n } else {\n return bytes(store).length;\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/Strings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n */\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError, bytes32) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.20;\n\nimport {MessageHashUtils} from \"./MessageHashUtils.sol\";\nimport {ShortStrings, ShortString} from \"../ShortStrings.sol\";\nimport {IERC5267} from \"../../interfaces/IERC5267.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n *\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\n */\nabstract contract EIP712 is IERC5267 {\n using ShortStrings for *;\n\n bytes32 private constant TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _cachedDomainSeparator;\n uint256 private immutable _cachedChainId;\n address private immutable _cachedThis;\n\n bytes32 private immutable _hashedName;\n bytes32 private immutable _hashedVersion;\n\n ShortString private immutable _name;\n ShortString private immutable _version;\n string private _nameFallback;\n string private _versionFallback;\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n _name = name.toShortStringWithFallback(_nameFallback);\n _version = version.toShortStringWithFallback(_versionFallback);\n _hashedName = keccak256(bytes(name));\n _hashedVersion = keccak256(bytes(version));\n\n _cachedChainId = block.chainid;\n _cachedDomainSeparator = _buildDomainSeparator();\n _cachedThis = address(this);\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\n return _cachedDomainSeparator;\n } else {\n return _buildDomainSeparator();\n }\n }\n\n function _buildDomainSeparator() private view returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n\n /**\n * @dev See {IERC-5267}.\n */\n function eip712Domain()\n public\n view\n virtual\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n )\n {\n return (\n hex\"0f\", // 01111\n _EIP712Name(),\n _EIP712Version(),\n block.chainid,\n address(this),\n bytes32(0),\n new uint256[](0)\n );\n }\n\n /**\n * @dev The name parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _name which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Name() internal view returns (string memory) {\n return _name.toStringWithFallback(_nameFallback);\n }\n\n /**\n * @dev The version parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _version which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Version() internal view returns (string memory) {\n return _version.toStringWithFallback(_versionFallback);\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/Checkpoints.sol)\n// This file was procedurally generated from scripts/generate/templates/Checkpoints.js.\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"../math/Math.sol\";\n\n/**\n * @dev This library defines the `Trace*` struct, for checkpointing values as they change at different points in\n * time, and later looking up past values by block number. See {Votes} as an example.\n *\n * To create a history of checkpoints define a variable type `Checkpoints.Trace*` in your contract, and store a new\n * checkpoint for the current transaction block using the {push} function.\n */\nlibrary Checkpoints {\n /**\n * @dev A value was attempted to be inserted on a past checkpoint.\n */\n error CheckpointUnorderedInsertion();\n\n struct Trace224 {\n Checkpoint224[] _checkpoints;\n }\n\n struct Checkpoint224 {\n uint32 _key;\n uint224 _value;\n }\n\n /**\n * @dev Pushes a (`key`, `value`) pair into a Trace224 so that it is stored as the checkpoint.\n *\n * Returns previous value and new value.\n *\n * IMPORTANT: Never accept `key` as a user input, since an arbitrary `type(uint32).max` key set will disable the\n * library.\n */\n function push(Trace224 storage self, uint32 key, uint224 value) internal returns (uint224, uint224) {\n return _insert(self._checkpoints, key, value);\n }\n\n /**\n * @dev Returns the value in the first (oldest) checkpoint with key greater or equal than the search key, or zero if\n * there is none.\n */\n function lowerLookup(Trace224 storage self, uint32 key) internal view returns (uint224) {\n uint256 len = self._checkpoints.length;\n uint256 pos = _lowerBinaryLookup(self._checkpoints, key, 0, len);\n return pos == len ? 0 : _unsafeAccess(self._checkpoints, pos)._value;\n }\n\n /**\n * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero\n * if there is none.\n */\n function upperLookup(Trace224 storage self, uint32 key) internal view returns (uint224) {\n uint256 len = self._checkpoints.length;\n uint256 pos = _upperBinaryLookup(self._checkpoints, key, 0, len);\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero\n * if there is none.\n *\n * NOTE: This is a variant of {upperLookup} that is optimised to find \"recent\" checkpoint (checkpoints with high\n * keys).\n */\n function upperLookupRecent(Trace224 storage self, uint32 key) internal view returns (uint224) {\n uint256 len = self._checkpoints.length;\n\n uint256 low = 0;\n uint256 high = len;\n\n if (len > 5) {\n uint256 mid = len - Math.sqrt(len);\n if (key < _unsafeAccess(self._checkpoints, mid)._key) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n uint256 pos = _upperBinaryLookup(self._checkpoints, key, low, high);\n\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns the value in the most recent checkpoint, or zero if there are no checkpoints.\n */\n function latest(Trace224 storage self) internal view returns (uint224) {\n uint256 pos = self._checkpoints.length;\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns whether there is a checkpoint in the structure (i.e. it is not empty), and if so the key and value\n * in the most recent checkpoint.\n */\n function latestCheckpoint(Trace224 storage self) internal view returns (bool exists, uint32 _key, uint224 _value) {\n uint256 pos = self._checkpoints.length;\n if (pos == 0) {\n return (false, 0, 0);\n } else {\n Checkpoint224 memory ckpt = _unsafeAccess(self._checkpoints, pos - 1);\n return (true, ckpt._key, ckpt._value);\n }\n }\n\n /**\n * @dev Returns the number of checkpoint.\n */\n function length(Trace224 storage self) internal view returns (uint256) {\n return self._checkpoints.length;\n }\n\n /**\n * @dev Returns checkpoint at given position.\n */\n function at(Trace224 storage self, uint32 pos) internal view returns (Checkpoint224 memory) {\n return self._checkpoints[pos];\n }\n\n /**\n * @dev Pushes a (`key`, `value`) pair into an ordered list of checkpoints, either by inserting a new checkpoint,\n * or by updating the last one.\n */\n function _insert(Checkpoint224[] storage self, uint32 key, uint224 value) private returns (uint224, uint224) {\n uint256 pos = self.length;\n\n if (pos > 0) {\n // Copying to memory is important here.\n Checkpoint224 memory last = _unsafeAccess(self, pos - 1);\n\n // Checkpoint keys must be non-decreasing.\n if (last._key > key) {\n revert CheckpointUnorderedInsertion();\n }\n\n // Update or push new checkpoint\n if (last._key == key) {\n _unsafeAccess(self, pos - 1)._value = value;\n } else {\n self.push(Checkpoint224({_key: key, _value: value}));\n }\n return (last._value, value);\n } else {\n self.push(Checkpoint224({_key: key, _value: value}));\n return (0, value);\n }\n }\n\n /**\n * @dev Return the index of the last (most recent) checkpoint with key lower or equal than the search key, or `high`\n * if there is none. `low` and `high` define a section where to do the search, with inclusive `low` and exclusive\n * `high`.\n *\n * WARNING: `high` should not be greater than the array's length.\n */\n function _upperBinaryLookup(\n Checkpoint224[] storage self,\n uint32 key,\n uint256 low,\n uint256 high\n ) private view returns (uint256) {\n while (low < high) {\n uint256 mid = Math.average(low, high);\n if (_unsafeAccess(self, mid)._key > key) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n return high;\n }\n\n /**\n * @dev Return the index of the first (oldest) checkpoint with key is greater or equal than the search key, or\n * `high` if there is none. `low` and `high` define a section where to do the search, with inclusive `low` and\n * exclusive `high`.\n *\n * WARNING: `high` should not be greater than the array's length.\n */\n function _lowerBinaryLookup(\n Checkpoint224[] storage self,\n uint32 key,\n uint256 low,\n uint256 high\n ) private view returns (uint256) {\n while (low < high) {\n uint256 mid = Math.average(low, high);\n if (_unsafeAccess(self, mid)._key < key) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n\n /**\n * @dev Access an element of the array without performing bounds check. The position is assumed to be within bounds.\n */\n function _unsafeAccess(\n Checkpoint224[] storage self,\n uint256 pos\n ) private pure returns (Checkpoint224 storage result) {\n assembly {\n mstore(0, self.slot)\n result.slot := add(keccak256(0, 0x20), pos)\n }\n }\n\n struct Trace208 {\n Checkpoint208[] _checkpoints;\n }\n\n struct Checkpoint208 {\n uint48 _key;\n uint208 _value;\n }\n\n /**\n * @dev Pushes a (`key`, `value`) pair into a Trace208 so that it is stored as the checkpoint.\n *\n * Returns previous value and new value.\n *\n * IMPORTANT: Never accept `key` as a user input, since an arbitrary `type(uint48).max` key set will disable the\n * library.\n */\n function push(Trace208 storage self, uint48 key, uint208 value) internal returns (uint208, uint208) {\n return _insert(self._checkpoints, key, value);\n }\n\n /**\n * @dev Returns the value in the first (oldest) checkpoint with key greater or equal than the search key, or zero if\n * there is none.\n */\n function lowerLookup(Trace208 storage self, uint48 key) internal view returns (uint208) {\n uint256 len = self._checkpoints.length;\n uint256 pos = _lowerBinaryLookup(self._checkpoints, key, 0, len);\n return pos == len ? 0 : _unsafeAccess(self._checkpoints, pos)._value;\n }\n\n /**\n * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero\n * if there is none.\n */\n function upperLookup(Trace208 storage self, uint48 key) internal view returns (uint208) {\n uint256 len = self._checkpoints.length;\n uint256 pos = _upperBinaryLookup(self._checkpoints, key, 0, len);\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero\n * if there is none.\n *\n * NOTE: This is a variant of {upperLookup} that is optimised to find \"recent\" checkpoint (checkpoints with high\n * keys).\n */\n function upperLookupRecent(Trace208 storage self, uint48 key) internal view returns (uint208) {\n uint256 len = self._checkpoints.length;\n\n uint256 low = 0;\n uint256 high = len;\n\n if (len > 5) {\n uint256 mid = len - Math.sqrt(len);\n if (key < _unsafeAccess(self._checkpoints, mid)._key) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n uint256 pos = _upperBinaryLookup(self._checkpoints, key, low, high);\n\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns the value in the most recent checkpoint, or zero if there are no checkpoints.\n */\n function latest(Trace208 storage self) internal view returns (uint208) {\n uint256 pos = self._checkpoints.length;\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns whether there is a checkpoint in the structure (i.e. it is not empty), and if so the key and value\n * in the most recent checkpoint.\n */\n function latestCheckpoint(Trace208 storage self) internal view returns (bool exists, uint48 _key, uint208 _value) {\n uint256 pos = self._checkpoints.length;\n if (pos == 0) {\n return (false, 0, 0);\n } else {\n Checkpoint208 memory ckpt = _unsafeAccess(self._checkpoints, pos - 1);\n return (true, ckpt._key, ckpt._value);\n }\n }\n\n /**\n * @dev Returns the number of checkpoint.\n */\n function length(Trace208 storage self) internal view returns (uint256) {\n return self._checkpoints.length;\n }\n\n /**\n * @dev Returns checkpoint at given position.\n */\n function at(Trace208 storage self, uint32 pos) internal view returns (Checkpoint208 memory) {\n return self._checkpoints[pos];\n }\n\n /**\n * @dev Pushes a (`key`, `value`) pair into an ordered list of checkpoints, either by inserting a new checkpoint,\n * or by updating the last one.\n */\n function _insert(Checkpoint208[] storage self, uint48 key, uint208 value) private returns (uint208, uint208) {\n uint256 pos = self.length;\n\n if (pos > 0) {\n // Copying to memory is important here.\n Checkpoint208 memory last = _unsafeAccess(self, pos - 1);\n\n // Checkpoint keys must be non-decreasing.\n if (last._key > key) {\n revert CheckpointUnorderedInsertion();\n }\n\n // Update or push new checkpoint\n if (last._key == key) {\n _unsafeAccess(self, pos - 1)._value = value;\n } else {\n self.push(Checkpoint208({_key: key, _value: value}));\n }\n return (last._value, value);\n } else {\n self.push(Checkpoint208({_key: key, _value: value}));\n return (0, value);\n }\n }\n\n /**\n * @dev Return the index of the last (most recent) checkpoint with key lower or equal than the search key, or `high`\n * if there is none. `low` and `high` define a section where to do the search, with inclusive `low` and exclusive\n * `high`.\n *\n * WARNING: `high` should not be greater than the array's length.\n */\n function _upperBinaryLookup(\n Checkpoint208[] storage self,\n uint48 key,\n uint256 low,\n uint256 high\n ) private view returns (uint256) {\n while (low < high) {\n uint256 mid = Math.average(low, high);\n if (_unsafeAccess(self, mid)._key > key) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n return high;\n }\n\n /**\n * @dev Return the index of the first (oldest) checkpoint with key is greater or equal than the search key, or\n * `high` if there is none. `low` and `high` define a section where to do the search, with inclusive `low` and\n * exclusive `high`.\n *\n * WARNING: `high` should not be greater than the array's length.\n */\n function _lowerBinaryLookup(\n Checkpoint208[] storage self,\n uint48 key,\n uint256 low,\n uint256 high\n ) private view returns (uint256) {\n while (low < high) {\n uint256 mid = Math.average(low, high);\n if (_unsafeAccess(self, mid)._key < key) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n\n /**\n * @dev Access an element of the array without performing bounds check. The position is assumed to be within bounds.\n */\n function _unsafeAccess(\n Checkpoint208[] storage self,\n uint256 pos\n ) private pure returns (Checkpoint208 storage result) {\n assembly {\n mstore(0, self.slot)\n result.slot := add(keccak256(0, 0x20), pos)\n }\n }\n\n struct Trace160 {\n Checkpoint160[] _checkpoints;\n }\n\n struct Checkpoint160 {\n uint96 _key;\n uint160 _value;\n }\n\n /**\n * @dev Pushes a (`key`, `value`) pair into a Trace160 so that it is stored as the checkpoint.\n *\n * Returns previous value and new value.\n *\n * IMPORTANT: Never accept `key` as a user input, since an arbitrary `type(uint96).max` key set will disable the\n * library.\n */\n function push(Trace160 storage self, uint96 key, uint160 value) internal returns (uint160, uint160) {\n return _insert(self._checkpoints, key, value);\n }\n\n /**\n * @dev Returns the value in the first (oldest) checkpoint with key greater or equal than the search key, or zero if\n * there is none.\n */\n function lowerLookup(Trace160 storage self, uint96 key) internal view returns (uint160) {\n uint256 len = self._checkpoints.length;\n uint256 pos = _lowerBinaryLookup(self._checkpoints, key, 0, len);\n return pos == len ? 0 : _unsafeAccess(self._checkpoints, pos)._value;\n }\n\n /**\n * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero\n * if there is none.\n */\n function upperLookup(Trace160 storage self, uint96 key) internal view returns (uint160) {\n uint256 len = self._checkpoints.length;\n uint256 pos = _upperBinaryLookup(self._checkpoints, key, 0, len);\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero\n * if there is none.\n *\n * NOTE: This is a variant of {upperLookup} that is optimised to find \"recent\" checkpoint (checkpoints with high\n * keys).\n */\n function upperLookupRecent(Trace160 storage self, uint96 key) internal view returns (uint160) {\n uint256 len = self._checkpoints.length;\n\n uint256 low = 0;\n uint256 high = len;\n\n if (len > 5) {\n uint256 mid = len - Math.sqrt(len);\n if (key < _unsafeAccess(self._checkpoints, mid)._key) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n uint256 pos = _upperBinaryLookup(self._checkpoints, key, low, high);\n\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns the value in the most recent checkpoint, or zero if there are no checkpoints.\n */\n function latest(Trace160 storage self) internal view returns (uint160) {\n uint256 pos = self._checkpoints.length;\n return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value;\n }\n\n /**\n * @dev Returns whether there is a checkpoint in the structure (i.e. it is not empty), and if so the key and value\n * in the most recent checkpoint.\n */\n function latestCheckpoint(Trace160 storage self) internal view returns (bool exists, uint96 _key, uint160 _value) {\n uint256 pos = self._checkpoints.length;\n if (pos == 0) {\n return (false, 0, 0);\n } else {\n Checkpoint160 memory ckpt = _unsafeAccess(self._checkpoints, pos - 1);\n return (true, ckpt._key, ckpt._value);\n }\n }\n\n /**\n * @dev Returns the number of checkpoint.\n */\n function length(Trace160 storage self) internal view returns (uint256) {\n return self._checkpoints.length;\n }\n\n /**\n * @dev Returns checkpoint at given position.\n */\n function at(Trace160 storage self, uint32 pos) internal view returns (Checkpoint160 memory) {\n return self._checkpoints[pos];\n }\n\n /**\n * @dev Pushes a (`key`, `value`) pair into an ordered list of checkpoints, either by inserting a new checkpoint,\n * or by updating the last one.\n */\n function _insert(Checkpoint160[] storage self, uint96 key, uint160 value) private returns (uint160, uint160) {\n uint256 pos = self.length;\n\n if (pos > 0) {\n // Copying to memory is important here.\n Checkpoint160 memory last = _unsafeAccess(self, pos - 1);\n\n // Checkpoint keys must be non-decreasing.\n if (last._key > key) {\n revert CheckpointUnorderedInsertion();\n }\n\n // Update or push new checkpoint\n if (last._key == key) {\n _unsafeAccess(self, pos - 1)._value = value;\n } else {\n self.push(Checkpoint160({_key: key, _value: value}));\n }\n return (last._value, value);\n } else {\n self.push(Checkpoint160({_key: key, _value: value}));\n return (0, value);\n }\n }\n\n /**\n * @dev Return the index of the last (most recent) checkpoint with key lower or equal than the search key, or `high`\n * if there is none. `low` and `high` define a section where to do the search, with inclusive `low` and exclusive\n * `high`.\n *\n * WARNING: `high` should not be greater than the array's length.\n */\n function _upperBinaryLookup(\n Checkpoint160[] storage self,\n uint96 key,\n uint256 low,\n uint256 high\n ) private view returns (uint256) {\n while (low < high) {\n uint256 mid = Math.average(low, high);\n if (_unsafeAccess(self, mid)._key > key) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n return high;\n }\n\n /**\n * @dev Return the index of the first (oldest) checkpoint with key is greater or equal than the search key, or\n * `high` if there is none. `low` and `high` define a section where to do the search, with inclusive `low` and\n * exclusive `high`.\n *\n * WARNING: `high` should not be greater than the array's length.\n */\n function _lowerBinaryLookup(\n Checkpoint160[] storage self,\n uint96 key,\n uint256 low,\n uint256 high\n ) private view returns (uint256) {\n while (low < high) {\n uint256 mid = Math.average(low, high);\n if (_unsafeAccess(self, mid)._key < key) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n\n /**\n * @dev Access an element of the array without performing bounds check. The position is assumed to be within bounds.\n */\n function _unsafeAccess(\n Checkpoint160[] storage self,\n uint256 pos\n ) private pure returns (Checkpoint160 storage result) {\n assembly {\n mstore(0, self.slot)\n result.slot := add(keccak256(0, 0x20), pos)\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/types/Time.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/types/Time.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"../math/Math.sol\";\nimport {SafeCast} from \"../math/SafeCast.sol\";\n\n/**\n * @dev This library provides helpers for manipulating time-related objects.\n *\n * It uses the following types:\n * - `uint48` for timepoints\n * - `uint32` for durations\n *\n * While the library doesn't provide specific types for timepoints and duration, it does provide:\n * - a `Delay` type to represent duration that can be programmed to change value automatically at a given point\n * - additional helper functions\n */\nlibrary Time {\n using Time for *;\n\n /**\n * @dev Get the block timestamp as a Timepoint.\n */\n function timestamp() internal view returns (uint48) {\n return SafeCast.toUint48(block.timestamp);\n }\n\n /**\n * @dev Get the block number as a Timepoint.\n */\n function blockNumber() internal view returns (uint48) {\n return SafeCast.toUint48(block.number);\n }\n\n // ==================================================== Delay =====================================================\n /**\n * @dev A `Delay` is a uint32 duration that can be programmed to change value automatically at a given point in the\n * future. The \"effect\" timepoint describes when the transitions happens from the \"old\" value to the \"new\" value.\n * This allows updating the delay applied to some operation while keeping some guarantees.\n *\n * In particular, the {update} function guarantees that if the delay is reduced, the old delay still applies for\n * some time. For example if the delay is currently 7 days to do an upgrade, the admin should not be able to set\n * the delay to 0 and upgrade immediately. If the admin wants to reduce the delay, the old delay (7 days) should\n * still apply for some time.\n *\n *\n * The `Delay` type is 112 bits long, and packs the following:\n *\n * ```\n * | [uint48]: effect date (timepoint)\n * | | [uint32]: value before (duration)\n * ↓ ↓ ↓ [uint32]: value after (duration)\n * 0xAAAAAAAAAAAABBBBBBBBCCCCCCCC\n * ```\n *\n * NOTE: The {get} and {withUpdate} functions operate using timestamps. Block number based delays are not currently\n * supported.\n */\n type Delay is uint112;\n\n /**\n * @dev Wrap a duration into a Delay to add the one-step \"update in the future\" feature\n */\n function toDelay(uint32 duration) internal pure returns (Delay) {\n return Delay.wrap(duration);\n }\n\n /**\n * @dev Get the value at a given timepoint plus the pending value and effect timepoint if there is a scheduled\n * change after this timepoint. If the effect timepoint is 0, then the pending value should not be considered.\n */\n function _getFullAt(Delay self, uint48 timepoint) private pure returns (uint32, uint32, uint48) {\n (uint32 valueBefore, uint32 valueAfter, uint48 effect) = self.unpack();\n return effect <= timepoint ? (valueAfter, 0, 0) : (valueBefore, valueAfter, effect);\n }\n\n /**\n * @dev Get the current value plus the pending value and effect timepoint if there is a scheduled change. If the\n * effect timepoint is 0, then the pending value should not be considered.\n */\n function getFull(Delay self) internal view returns (uint32, uint32, uint48) {\n return _getFullAt(self, timestamp());\n }\n\n /**\n * @dev Get the current value.\n */\n function get(Delay self) internal view returns (uint32) {\n (uint32 delay, , ) = self.getFull();\n return delay;\n }\n\n /**\n * @dev Update a Delay object so that it takes a new duration after a timepoint that is automatically computed to\n * enforce the old delay at the moment of the update. Returns the updated Delay object and the timestamp when the\n * new delay becomes effective.\n */\n function withUpdate(\n Delay self,\n uint32 newValue,\n uint32 minSetback\n ) internal view returns (Delay updatedDelay, uint48 effect) {\n uint32 value = self.get();\n uint32 setback = uint32(Math.max(minSetback, value > newValue ? value - newValue : 0));\n effect = timestamp() + setback;\n return (pack(value, newValue, effect), effect);\n }\n\n /**\n * @dev Split a delay into its components: valueBefore, valueAfter and effect (transition timepoint).\n */\n function unpack(Delay self) internal pure returns (uint32 valueBefore, uint32 valueAfter, uint48 effect) {\n uint112 raw = Delay.unwrap(self);\n\n valueAfter = uint32(raw);\n valueBefore = uint32(raw >> 32);\n effect = uint48(raw >> 64);\n\n return (valueBefore, valueAfter, effect);\n }\n\n /**\n * @dev pack the components into a Delay object.\n */\n function pack(uint32 valueBefore, uint32 valueAfter, uint48 effect) internal pure returns (Delay) {\n return Delay.wrap((uint112(effect) << 64) | (uint112(valueBefore) << 32) | uint112(valueAfter));\n }\n}\n" + }, + "src/JBProjects.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport {ERC721Votes} from \"@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol\";\nimport {ERC721} from \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\nimport {EIP712} from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {IJBProjects} from \"./interfaces/IJBProjects.sol\";\nimport {IJBTokenUriResolver} from \"./interfaces/IJBTokenUriResolver.sol\";\n\n/// @notice Stores project ownership and metadata.\n/// @dev Projects are represented as ERC-721s.\ncontract JBProjects is ERC721Votes, Ownable, IJBProjects {\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice The number of projects that have been created using this contract.\n /// @dev The count is incremented with each new project created.\n /// @dev The resulting ERC-721 token ID for each project is the newly incremented count value.\n uint256 public override count = 0;\n\n /// @notice The contract resolving each project ID to its ERC721 URI.\n IJBTokenUriResolver public override tokenUriResolver;\n\n //*********************************************************************//\n // -------------------------- public views --------------------------- //\n //*********************************************************************//\n\n /// @notice Returns the URI where the ERC-721 standard JSON of a project is hosted.\n /// @param projectId The ID of the project to get a URI of.\n /// @return The token URI to use for the provided `projectId`.\n function tokenURI(uint256 projectId) public view override returns (string memory) {\n // Keep a reference to the resolver.\n IJBTokenUriResolver resolver = tokenUriResolver;\n\n // If there's no resolver, there's no URI.\n if (resolver == IJBTokenUriResolver(address(0))) return \"\";\n\n // Return the resolved URI.\n return resolver.getUri(projectId);\n }\n\n /// @notice Indicates if this contract adheres to the specified interface.\n /// @dev See {IERC165-supportsInterface}.\n /// @param interfaceId The ID of the interface to check for adherance to.\n /// @return A flag indicating if the provided interface ID is supported.\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {\n return interfaceId == type(IJBProjects).interfaceId || super.supportsInterface(interfaceId);\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param owner The owner of the contract who can set metadata.\n constructor(address owner)\n ERC721(\"Juicebox Projects\", \"JUICEBOX\")\n EIP712(\"Juicebox Projects\", \"1\")\n Ownable(owner)\n {}\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Create a new project for the specified owner, which mints an NFT (ERC-721) into their wallet.\n /// @dev Anyone can create a project on an owner's behalf.\n /// @param owner The address that will be the owner of the project.\n /// @return projectId The token ID of the newly created project.\n function createFor(address owner) external override returns (uint256 projectId) {\n // Increment the count, which will be used as the ID.\n projectId = ++count;\n\n // Mint the project.\n _safeMint(owner, projectId);\n\n emit Create(projectId, owner, _msgSender());\n }\n\n /// @notice Sets the address of the resolver used to retrieve the tokenURI of projects.\n /// @param newResolver The address of the new resolver.\n function setTokenUriResolver(IJBTokenUriResolver newResolver) external override onlyOwner {\n // Store the new resolver.\n tokenUriResolver = newResolver;\n\n emit SetTokenUriResolver(newResolver, _msgSender());\n }\n}\n" + }, + "src/interfaces/IJBProjects.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC721} from \"@openzeppelin/contracts/token/ERC721/IERC721.sol\";\nimport {IJBTokenUriResolver} from \"./IJBTokenUriResolver.sol\";\n\ninterface IJBProjects is IERC721 {\n event Create(uint256 indexed projectId, address indexed owner, address caller);\n\n event SetTokenUriResolver(IJBTokenUriResolver indexed resolver, address caller);\n\n function count() external view returns (uint256);\n\n function tokenUriResolver() external view returns (IJBTokenUriResolver);\n\n function createFor(address owner) external returns (uint256 projectId);\n\n function setTokenUriResolver(IJBTokenUriResolver newResolver) external;\n}\n" + }, + "src/interfaces/IJBTokenUriResolver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IJBTokenUriResolver {\n function getUri(uint256 projectId) external view returns (string memory tokenUri);\n}\n" + }, + "src/JBDirectory.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {JBPermissionIds} from \"@bananapus/permission-ids/src/JBPermissionIds.sol\";\nimport {JBPermissioned} from \"./abstract/JBPermissioned.sol\";\nimport {IJBDirectory} from \"./interfaces/IJBDirectory.sol\";\nimport {IJBDirectoryAccessControl} from \"./interfaces/IJBDirectoryAccessControl.sol\";\nimport {IJBPermissions} from \"./interfaces/IJBPermissions.sol\";\nimport {IJBTerminal} from \"./interfaces/terminal/IJBTerminal.sol\";\nimport {IJBProjects} from \"./interfaces/IJBProjects.sol\";\n\n/// @notice Tracks which terminal contracts each project is currently accepting funds through, and which controller\n/// contract is managing each project's tokens and rulesets.\ncontract JBDirectory is JBPermissioned, Ownable, IJBDirectory {\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n error DUPLICATE_TERMINALS();\n error INVALID_PROJECT_ID_IN_DIRECTORY();\n error SET_CONTROLLER_NOT_ALLOWED();\n error SET_TERMINALS_NOT_ALLOWED();\n error TOKEN_NOT_ACCEPTED();\n\n //*********************************************************************//\n // ---------------- public immutable stored properties --------------- //\n //*********************************************************************//\n\n /// @notice Mints ERC-721s that represent project ownership and transfers.\n IJBProjects public immutable override PROJECTS;\n\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice The controller, which dictates how terminals interact with tokens and rulesets, for a given project ID.\n /// @custom:param projectId The ID of the project to get the controller of.\n mapping(uint256 projectId => IERC165) public override controllerOf;\n\n /// @notice Addresses allowed to set a project's first controller on their behalf. These addresses/contracts have\n /// been vetted and verified by this contract's owner.\n /// @custom:param addr The address that is either allowed or not.\n mapping(address addr => bool) public override isAllowedToSetFirstController;\n\n //*********************************************************************//\n // --------------------- internal stored properties ------------------ //\n //*********************************************************************//\n\n /// @notice For each project ID, the terminals that are currently managing its funds.\n /// @custom:param projectId The ID of the project to get terminals of.\n mapping(uint256 projectId => IJBTerminal[]) internal _terminalsOf;\n\n /// @notice The project's primary terminal for a given token.\n /// @custom:param projectId The ID of the project to get the primary terminal of.\n /// @custom:param token The token to get the project's primary terminal for.\n mapping(uint256 projectId => mapping(address token => IJBTerminal)) internal _primaryTerminalOf;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice For given project ID, the terminals which are currently managing that project's funds.\n /// @param projectId The ID of the project to get the terminals of.\n /// @return An array of terminal addresses.\n function terminalsOf(uint256 projectId) external view override returns (IJBTerminal[] memory) {\n return _terminalsOf[projectId];\n }\n\n /// @notice The primary terminal that a project is using to manage a specified token.\n /// @dev The zero address is returned if a terminal isn't found for the specified token.\n /// @param projectId The ID of the project to get the primary terminal of.\n /// @param token The token the terminal accepts.\n /// @return The address of the primary terminal for the specified project and token.\n function primaryTerminalOf(uint256 projectId, address token) external view override returns (IJBTerminal) {\n // Keep a reference to the primary terminal for the provided project ID and token.\n IJBTerminal primaryTerminal = _primaryTerminalOf[projectId][token];\n\n // If a primary terminal for the token was specifically set and it's one of the project's terminals, return it.\n if (primaryTerminal != IJBTerminal(address(0)) && isTerminalOf(projectId, primaryTerminal)) {\n return primaryTerminal;\n }\n\n // Keep a reference to the number of terminals the project has.\n uint256 numberOfTerminals = _terminalsOf[projectId].length;\n\n // Return the first terminal which accepts the specified token.\n for (uint256 i; i < numberOfTerminals; i++) {\n // Keep a reference to the terminal being iterated on.\n IJBTerminal terminal = _terminalsOf[projectId][i];\n\n // If the terminal accepts the specified token, return it.\n if (terminal.accountingContextForTokenOf(projectId, token).token != address(0)) {\n return terminal;\n }\n }\n\n // Not found.\n return IJBTerminal(address(0));\n }\n\n //*********************************************************************//\n // -------------------------- public views --------------------------- //\n //*********************************************************************//\n\n /// @notice Check if a specified project uses a specified terminal.\n /// @param projectId The ID of the project to check for the terminal.\n /// @param terminal The address of the terminal to check for.\n /// @return A flag indicating whether or not the specified terminal is a terminal of the specified project.\n function isTerminalOf(uint256 projectId, IJBTerminal terminal) public view override returns (bool) {\n // Keep a reference to the number of terminals the project has.\n uint256 numberOfTerminals = _terminalsOf[projectId].length;\n\n // Loop through and return true if the terminal is contained.\n for (uint256 i; i < numberOfTerminals; i++) {\n // If the terminal being iterated on matches the provided terminal, return true.\n if (_terminalsOf[projectId][i] == terminal) return true;\n }\n\n // Otherwise, return false.\n return false;\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param permissions A contract storing permissions.\n /// @param projects A contract which mints ERC-721s that represent project ownership and transfers.\n /// @param owner The address that will own the contract.\n constructor(\n IJBPermissions permissions,\n IJBProjects projects,\n address owner\n )\n JBPermissioned(permissions)\n Ownable(owner)\n {\n PROJECTS = projects;\n }\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Set a project's controller. Controllers manage how terminals interact with tokens and rulesets.\n /// @dev A controller can be set if:\n /// @dev - The project's ruleset allows setting the controller, and the message sender is the project owner or an\n /// operator with the `SET_CONTROLLER` permission from them.\n /// @dev - OR the message sender is the project's current controller.\n /// @dev - OR an allowedlisted address is setting a controller for a project that doesn't already have a controller.\n /// @param projectId The ID of the project to set the controller of.\n /// @param controller The address of the new controller to set for the project.\n function setControllerOf(uint256 projectId, IERC165 controller) external override {\n // Enforce permissions.\n _requirePermissionAllowingOverrideFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.SET_CONTROLLER,\n alsoGrantAccessIf: (isAllowedToSetFirstController[msg.sender] && address(controllerOf[projectId]) == address(0))\n });\n // The project must exist.\n if (PROJECTS.count() < projectId) revert INVALID_PROJECT_ID_IN_DIRECTORY();\n\n // Keep a reference to the current controller.\n IERC165 currentController = controllerOf[projectId];\n\n // Get a reference to the flag indicating if the project is allowed to set terminals.\n bool allowSetController = address(currentController) == address(0)\n || !currentController.supportsInterface(type(IJBDirectoryAccessControl).interfaceId)\n ? true\n : IJBDirectoryAccessControl(address(currentController)).setControllerAllowed(projectId);\n\n // Setting controller is allowed if called from the current controller,\n // OR if the project doesn't have a current controller,\n // OR if the project's ruleset allows setting the controller.\n // Otherwise, revert.\n if (!allowSetController) {\n revert SET_CONTROLLER_NOT_ALLOWED();\n }\n\n // Set the new controller.\n controllerOf[projectId] = controller;\n\n emit SetController(projectId, controller, msg.sender);\n }\n\n /// @notice Set a project's terminals.\n /// @dev Only a project's owner, an operator with the `SET_TERMINALS` permission from the owner, or the project's\n /// controller can set its terminals.\n /// @dev Unless the caller is the project's controller, the project's ruleset must allow setting terminals.\n /// @param projectId The ID of the project to set terminals for.\n /// @param terminals An array of terminal addresses to set for the project.\n function setTerminalsOf(uint256 projectId, IJBTerminal[] calldata terminals) external override {\n // Enforce permissions.\n _requirePermissionAllowingOverrideFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.SET_TERMINALS,\n alsoGrantAccessIf: msg.sender == address(controllerOf[projectId])\n });\n\n // Keep a reference to the current controller.\n IERC165 controller = controllerOf[projectId];\n\n // Get a reference to the flag indicating if the project is allowed to set terminals.\n bool allowSetTerminals = !controller.supportsInterface(type(IJBDirectoryAccessControl).interfaceId)\n || IJBDirectoryAccessControl(address(controller)).setTerminalsAllowed(projectId);\n\n // Setting terminals must be allowed if not called from the current controller.\n if (msg.sender != address(controllerOf[projectId]) && !allowSetTerminals) {\n revert SET_TERMINALS_NOT_ALLOWED();\n }\n\n // Set the stored terminals for the project.\n _terminalsOf[projectId] = terminals;\n\n // Keep a reference to the number of terminals being iterated upon.\n uint256 numberOfTerminals = terminals.length;\n\n // Make sure duplicates were not added.\n if (numberOfTerminals > 1) {\n for (uint256 i; i < numberOfTerminals; i++) {\n for (uint256 j = i + 1; j < numberOfTerminals; j++) {\n if (terminals[i] == terminals[j]) revert DUPLICATE_TERMINALS();\n }\n }\n }\n emit SetTerminals(projectId, terminals, msg.sender);\n }\n\n /// @notice Set a project's primary terminal for a particular token.\n /// @dev The primary terminal is where a token should be routed to by default.\n /// @dev This is useful in case a project has several terminals connected for a particular token.\n /// @dev If setting a newly added terminal and the ruleset doesn't allow new terminals, the caller must be the\n /// current controller.\n /// @param projectId The ID of the project a primary token is being set for.\n /// @param token The token to set the primary terminal for.\n /// @param terminal The terminal to make the primary terminal for the project and token.\n function setPrimaryTerminalOf(uint256 projectId, address token, IJBTerminal terminal) external override {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.SET_PRIMARY_TERMINAL\n });\n\n // Can't set the primary terminal for a token if the terminal doesn't accept the token.\n if (terminal.accountingContextForTokenOf(projectId, token).token == address(0)) {\n revert TOKEN_NOT_ACCEPTED();\n }\n\n // Add the terminal to the project if it hasn't been already.\n _addTerminalIfNeeded(projectId, terminal);\n\n // Store the terminal as the primary terminal for the token.\n _primaryTerminalOf[projectId][token] = terminal;\n\n emit SetPrimaryTerminal(projectId, token, terminal, msg.sender);\n }\n\n /// @notice Add an address/contract to the list of trusted addresses which are allowed to set a first controller for\n /// projects.\n /// @dev Only this contract's owner can call this function.\n /// @dev These addresses are known and vetted controllers as well as contracts designed to launch new projects.\n /// @dev A project can set its own controller without being on the allow list.\n /// @dev If you would like an address/contract allowlisted, please reach out to the contract owner.\n /// @param addr The address to allow or not allow.\n /// @param flag Whether the address is allowed or not allowed to set first controllers for projects. Use `true` to\n /// allow and `false` to not allow.\n function setIsAllowedToSetFirstController(address addr, bool flag) external override onlyOwner {\n // Set the flag in the allowlist.\n isAllowedToSetFirstController[addr] = flag;\n\n emit SetIsAllowedToSetFirstController(addr, flag, msg.sender);\n }\n\n //*********************************************************************//\n // --------------------- internal helper functions ------------------- //\n //*********************************************************************//\n\n /// @notice Add a terminal to a project's list of terminals if it hasn't already been added.\n /// @dev Unless the caller is the project's controller, the project's ruleset must allow setting terminals.\n /// @param projectId The ID of the project to add the terminal to.\n /// @param terminal The terminal to add.\n function _addTerminalIfNeeded(uint256 projectId, IJBTerminal terminal) internal {\n // Ensure that the terminal has not already been added.\n if (isTerminalOf(projectId, terminal)) return;\n\n // Keep a reference to the current controller.\n IERC165 controller = controllerOf[projectId];\n\n // Get a reference to the flag indicating if the project is allowed to set terminals.\n bool allowSetTerminals = !controller.supportsInterface(type(IJBDirectoryAccessControl).interfaceId)\n || IJBDirectoryAccessControl(address(controller)).setTerminalsAllowed(projectId);\n\n // Setting terminals must be allowed if not called from the current controller.\n if (msg.sender != address(controllerOf[projectId]) && !allowSetTerminals) {\n revert SET_TERMINALS_NOT_ALLOWED();\n }\n\n // Add the new terminal.\n _terminalsOf[projectId].push(terminal);\n\n emit AddTerminal(projectId, terminal, msg.sender);\n }\n}\n" + }, + "src/interfaces/IJBDirectory.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {IJBTerminal} from \"./terminal/IJBTerminal.sol\";\nimport {IJBProjects} from \"./IJBProjects.sol\";\n\ninterface IJBDirectory {\n event SetController(uint256 indexed projectId, IERC165 indexed controller, address caller);\n\n event AddTerminal(uint256 indexed projectId, IJBTerminal indexed terminal, address caller);\n\n event SetTerminals(uint256 indexed projectId, IJBTerminal[] terminals, address caller);\n\n event SetPrimaryTerminal(\n uint256 indexed projectId, address indexed token, IJBTerminal indexed terminal, address caller\n );\n\n event SetIsAllowedToSetFirstController(address indexed addr, bool indexed flag, address caller);\n\n function PROJECTS() external view returns (IJBProjects);\n\n function controllerOf(uint256 projectId) external view returns (IERC165);\n\n function isAllowedToSetFirstController(address account) external view returns (bool);\n\n function terminalsOf(uint256 projectId) external view returns (IJBTerminal[] memory);\n\n function isTerminalOf(uint256 projectId, IJBTerminal terminal) external view returns (bool);\n\n function primaryTerminalOf(uint256 projectId, address token) external view returns (IJBTerminal);\n\n function setControllerOf(uint256 projectId, IERC165 controller) external;\n\n function setTerminalsOf(uint256 projectId, IJBTerminal[] calldata terminals) external;\n\n function setPrimaryTerminalOf(uint256 projectId, address token, IJBTerminal terminal) external;\n\n function setIsAllowedToSetFirstController(address account, bool flag) external;\n}\n" + }, + "src/interfaces/IJBDirectoryAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IJBDirectoryAccessControl {\n function setTerminalsAllowed(uint256 projectId) external view returns (bool);\n function setControllerAllowed(uint256 projectId) external view returns (bool);\n}\n" + }, + "src/interfaces/IJBPayHook.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {JBAfterPayRecordedContext} from \"./../structs/JBAfterPayRecordedContext.sol\";\n\n/// @notice Hook called after a terminal's `pay(...)` logic completes (if passed by the ruleset's data hook).\ninterface IJBPayHook is IERC165 {\n /// @notice This function is called by the terminal's `pay(...)` function after the payment has been recorded in the\n /// terminal store.\n /// @dev Critical business logic should be protected by appropriate access control.\n /// @param context The context passed in by the terminal, as a `JBAfterPayRecordedContext` struct.\n function afterPayRecordedWith(JBAfterPayRecordedContext calldata context) external payable;\n}\n" + }, + "src/interfaces/terminal/IJBTerminal.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBAccountingContext} from \"../../structs/JBAccountingContext.sol\";\nimport {JBAfterPayRecordedContext} from \"../../structs/JBAfterPayRecordedContext.sol\";\n\nimport {IJBPayHook} from \"../../interfaces/IJBPayHook.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\n/// @notice A terminal that accepts payments and can be migrated.\ninterface IJBTerminal is IERC165 {\n event MigrateTerminal(\n uint256 indexed projectId, address indexed token, IJBTerminal indexed to, uint256 amount, address caller\n );\n\n event AddToBalance(\n uint256 indexed projectId, uint256 amount, uint256 unlockedFees, string memo, bytes metadata, address caller\n );\n\n event SetAccountingContext(\n uint256 indexed projectId, address indexed token, JBAccountingContext context, address caller\n );\n\n event Pay(\n uint256 indexed rulesetId,\n uint256 indexed rulesetCycleNumber,\n uint256 indexed projectId,\n address payer,\n address beneficiary,\n uint256 amount,\n uint256 beneficiaryTokenCount,\n string memo,\n bytes metadata,\n address caller\n );\n\n event HookAfterRecordPay(\n IJBPayHook indexed hook, JBAfterPayRecordedContext context, uint256 specificationAmount, address caller\n );\n\n function accountingContextForTokenOf(\n uint256 projectId,\n address token\n )\n external\n view\n returns (JBAccountingContext memory);\n\n function accountingContextsOf(uint256 projectId) external view returns (JBAccountingContext[] memory);\n\n function currentSurplusOf(uint256 projectId, uint256 decimals, uint256 currency) external view returns (uint256);\n\n function migrateBalanceOf(uint256 projectId, address token, IJBTerminal to) external returns (uint256 balance);\n\n function addAccountingContextsFor(uint256 projectId, address[] calldata tokens) external;\n\n function pay(\n uint256 projectId,\n address token,\n uint256 amount,\n address beneficiary,\n uint256 minReturnedTokens,\n string calldata memo,\n bytes calldata metadata\n )\n external\n payable\n returns (uint256 beneficiaryTokenCount);\n\n function addToBalanceOf(\n uint256 projectId,\n address token,\n uint256 amount,\n bool shouldReturnHeldFees,\n string calldata memo,\n bytes calldata metadata\n )\n external\n payable;\n}\n" + }, + "src/structs/JBAccountingContext.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @custom:member token The address of the token that accounting is being done with.\n/// @custom:member decimals The number of decimals expected in that token's fixed point accounting.\n/// @custom:member currency The currency that the token is priced in terms of.\nstruct JBAccountingContext {\n address token;\n uint8 decimals;\n uint32 currency;\n}\n" + }, + "src/structs/JBAfterPayRecordedContext.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBTokenAmount} from \"./JBTokenAmount.sol\";\n\n/// @custom:member payer The address the payment originated from.\n/// @custom:member projectId The ID of the project being paid.\n/// @custom:member rulesetId The ID of the ruleset the payment is being made during.\n/// @custom:member amount The payment's token amount. Includes the token being paid, the value, the number of decimals\n/// included, and the currency of the amount.\n/// @custom:member forwardedAmount The token amount being forwarded to the pay hook. Includes the token\n/// being paid, the value, the number of decimals included, and the currency of the amount.\n/// @custom:member weight The current ruleset's weight (used to determine how many tokens should be minted).\n/// @custom:member projectTokenCount The number of project tokens minted for the beneficiary.\n/// @custom:member beneficiary The address which receives any tokens this payment yields.\n/// @custom:member hookMetadata Extra data specified by the data hook, which is sent to the pay hook.\n/// @custom:member payerMetadata Extra data specified by the payer, which is sent to the pay hook.\nstruct JBAfterPayRecordedContext {\n address payer;\n uint256 projectId;\n uint256 rulesetId;\n JBTokenAmount amount;\n JBTokenAmount forwardedAmount;\n uint256 weight;\n uint256 projectTokenCount;\n address beneficiary;\n bytes hookMetadata;\n bytes payerMetadata;\n}\n" + }, + "src/structs/JBTokenAmount.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @custom:member token The token the payment was made in.\n/// @custom:member value The amount of tokens that was paid, as a fixed point number.\n/// @custom:member decimals The number of decimals included in the value fixed point number.\n/// @custom:member currency The expected currency of the value.\nstruct JBTokenAmount {\n address token;\n uint256 value;\n uint256 decimals;\n uint256 currency;\n}\n" + }, + "src/JBSplits.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {IJBDirectory} from \"./interfaces/IJBDirectory.sol\";\nimport {IJBSplits} from \"./interfaces/IJBSplits.sol\";\nimport {IJBSplitHook} from \"./interfaces/IJBSplitHook.sol\";\nimport {JBConstants} from \"./libraries/JBConstants.sol\";\nimport {JBSplitGroup} from \"./structs/JBSplitGroup.sol\";\nimport {JBSplit} from \"./structs/JBSplit.sol\";\nimport {JBControlled} from \"./abstract/JBControlled.sol\";\n\n/// @notice Stores and manages splits for each project.\ncontract JBSplits is JBControlled, IJBSplits {\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n error INVALID_LOCKED_UNTIL();\n error INVALID_PROJECT_ID();\n error INVALID_SPLIT_PERCENT();\n error INVALID_TOTAL_PERCENT();\n error PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED();\n\n //*********************************************************************//\n // ------------------------- public constants ------------------------ //\n //*********************************************************************//\n\n /// @notice the ID of the ruleset that will be checked if nothing was found in the provided rulesetId.\n uint256 public constant override FALLBACK_RULESET_ID = 0;\n\n //*********************************************************************//\n // --------------------- internal stored properties ------------------ //\n //*********************************************************************//\n\n /// @notice The number of splits currently stored in a group given a project ID, ruleset ID, and group ID.\n /// @custom:param projectId The ID of the project the split applies to.\n /// @custom:param rulesetId The ID of the ruleset that the group is specified within.\n /// @custom:param groupId The ID of the group to count this splits of.\n mapping(uint256 projectId => mapping(uint256 rulesetId => mapping(uint256 groupId => uint256))) internal\n _splitCountOf;\n\n /// @notice Packed split data given the split's project, ruleset, and group IDs, as well as the split's index within\n /// that group.\n /// @dev `preferAddToBalance` in bit 0, `percent` in bits 1-32, `projectId` in bits 33-88, and `beneficiary` in bits\n /// 89-248\n /// @custom:param projectId The ID of the project that the split applies to.\n /// @custom:param rulesetId The ID of the ruleset that the group is in.\n /// @custom:param groupId The ID of the group the split is in.\n /// @custom:param index The split's index within the group (in the order that the split were set).\n /// @custom:return The split's `preferAddToBalance`, `percent`, `projectId`, and `beneficiary` packed into one\n /// `uint256`.\n mapping(\n uint256 projectId => mapping(uint256 rulesetId => mapping(uint256 groupId => mapping(uint256 index => uint256)))\n ) internal _packedSplitParts1Of;\n\n /// @notice More packed split data given the split's project, ruleset, and group IDs, as well as the split's index\n /// within that group.\n /// @dev `lockedUntil` in bits 0-47, `hook` address in bits 48-207.\n /// @dev This packed data is often 0.\n /// @custom:param projectId The ID of the project that the ruleset applies to.\n /// @custom:param rulesetId The ID of the ruleset that the group is in.\n /// @custom:param groupId The ID of the group the split is in.\n /// @custom:param index The split's index within the group (in the order that the split were set).\n /// @custom:return The split's `lockedUntil` and `hook` packed into one `uint256`.\n mapping(\n uint256 projectId => mapping(uint256 rulesetId => mapping(uint256 groupId => mapping(uint256 index => uint256)))\n ) internal _packedSplitParts2Of;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice Get the split structs for the specified project ID, within the specified ruleset, for the specified\n /// group. The splits stored at ruleset 0 are used by default during a ruleset if the splits for the specific\n /// ruleset aren't set.\n /// @dev If splits aren't found at the given `rulesetId`, they'll be sought in the FALLBACK_RULESET_ID of 0.\n /// @param projectId The ID of the project to get splits for.\n /// @param rulesetId An identifier within which the returned splits should be considered active.\n /// @param groupId The identifying group of the splits.\n /// @return splits An array of all splits for the project.\n function splitsOf(\n uint256 projectId,\n uint256 rulesetId,\n uint256 groupId\n )\n external\n view\n override\n returns (JBSplit[] memory splits)\n {\n splits = _getStructsFor(projectId, rulesetId, groupId);\n\n // Use the default splits if there aren't any for the ruleset.\n if (splits.length == 0) {\n splits = _getStructsFor({projectId: projectId, rulesetId: FALLBACK_RULESET_ID, groupId: groupId});\n }\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param directory A contract storing directories of terminals and controllers for each project.\n constructor(IJBDirectory directory) JBControlled(directory) {}\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Sets a project's split groups.\n /// @dev Only a project's controller can set its splits.\n /// @dev The new split groups must include any currently set splits that are locked.\n /// @param projectId The ID of the project to set the split groups of.\n /// @param rulesetId The ID of the ruleset the split groups should be active in. Send\n /// 0 to set the default split that'll be active if no ruleset has specific splits set. The default's default is the\n /// project's owner.\n /// @param splitGroups An array of split groups to set.\n function setSplitGroupsOf(\n uint256 projectId,\n uint256 rulesetId,\n JBSplitGroup[] calldata splitGroups\n )\n external\n override\n onlyControllerOf(projectId)\n {\n // Keep a reference to the number of split groups.\n uint256 numberOfSplitGroups = splitGroups.length;\n\n // Set each grouped splits.\n for (uint256 i; i < numberOfSplitGroups; i++) {\n // Get a reference to the grouped split being iterated on.\n JBSplitGroup memory splitGroup = splitGroups[i];\n\n // Set the splits for the group.\n _setSplitsOf(projectId, rulesetId, splitGroup.groupId, splitGroup.splits);\n }\n }\n\n //*********************************************************************//\n // --------------------- internal helper functions ------------------- //\n //*********************************************************************//\n\n /// @notice Sets the splits for a group given a project, ruleset, and group ID.\n /// @dev The new splits must include any currently set splits that are locked.\n /// @dev The sum of the split `percent`s within one group must be less than 100%.\n /// @param projectId The ID of the project splits are being set for.\n /// @param rulesetId The ID of the ruleset the splits should be considered active within.\n /// @param groupId The ID of the group to set the splits within.\n /// @param splits An array of splits to set.\n function _setSplitsOf(uint256 projectId, uint256 rulesetId, uint256 groupId, JBSplit[] memory splits) internal {\n // Get a reference to the current split structs within the project, ruleset, and group.\n JBSplit[] memory currentSplits = _getStructsFor(projectId, rulesetId, groupId);\n\n // Keep a reference to the current number of splits within the group.\n uint256 numberOfCurrentSplits = currentSplits.length;\n\n // Check to see if all locked splits are included in the array of splits which is being set.\n for (uint256 i; i < numberOfCurrentSplits; i++) {\n // If not locked, continue.\n if (block.timestamp < currentSplits[i].lockedUntil && !_includesLockedSplits(splits, currentSplits[i])) {\n revert PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED();\n }\n }\n\n // Add up all the `percent`s to make sure their total is under 100%.\n uint256 percentTotal;\n\n // Keep a reference to the number of splits to set.\n uint256 numberOfSplits = splits.length;\n\n for (uint256 i; i < numberOfSplits; i++) {\n // The percent should be greater than 0.\n if (splits[i].percent == 0) revert INVALID_SPLIT_PERCENT();\n\n // `projectId` should fit within a uint56\n if (splits[i].projectId > type(uint56).max) revert INVALID_PROJECT_ID();\n\n // Add to the `percent` total.\n percentTotal = percentTotal + splits[i].percent;\n\n // Ensure the total does not exceed 100%.\n if (percentTotal > JBConstants.SPLITS_TOTAL_PERCENT) revert INVALID_TOTAL_PERCENT();\n\n uint256 packedSplitParts1;\n\n // Pack `preferAddToBalance` in bit 0.\n if (splits[i].preferAddToBalance) packedSplitParts1 = 1;\n // Pack `percent` in bits 1-32.\n packedSplitParts1 |= splits[i].percent << 1;\n // Pack `projectId` in bits 33-88.\n packedSplitParts1 |= splits[i].projectId << 33;\n // Pack `beneficiary` in bits 89-248.\n packedSplitParts1 |= uint256(uint160(address(splits[i].beneficiary))) << 89;\n\n // Store the first split part.\n _packedSplitParts1Of[projectId][rulesetId][groupId][i] = packedSplitParts1;\n\n // If there's data to store in the second packed split part, pack and store.\n if (splits[i].lockedUntil > 0 || splits[i].hook != IJBSplitHook(address(0))) {\n // `lockedUntil` should fit within a uint48\n if (splits[i].lockedUntil > type(uint48).max) revert INVALID_LOCKED_UNTIL();\n\n // Pack `lockedUntil` in bits 0-47.\n uint256 packedSplitParts2 = uint48(splits[i].lockedUntil);\n // Pack `hook` in bits 48-207.\n packedSplitParts2 |= uint256(uint160(address(splits[i].hook))) << 48;\n\n // Store the second split part.\n _packedSplitParts2Of[projectId][rulesetId][groupId][i] = packedSplitParts2;\n } else if (_packedSplitParts2Of[projectId][rulesetId][groupId][i] > 0) {\n // If there's a value stored in the indexed position, delete it.\n delete _packedSplitParts2Of[projectId][rulesetId][groupId][i];\n }\n\n emit SetSplit(projectId, rulesetId, groupId, splits[i], msg.sender);\n }\n\n // Store the number of splits for the project, ruleset, and group.\n _splitCountOf[projectId][rulesetId][groupId] = numberOfSplits;\n }\n\n /// @notice Determine if the provided splits array includes the locked split.\n /// @param splits The array of splits to check within.\n /// @param lockedSplit The locked split.\n /// @return A flag indicating if the `lockedSplit` is contained in the `splits`.\n function _includesLockedSplits(JBSplit[] memory splits, JBSplit memory lockedSplit) internal pure returns (bool) {\n // Keep a reference to the number of splits.\n uint256 numberOfSplits = splits.length;\n\n for (uint256 i; i < numberOfSplits; i++) {\n // Check for sameness.\n if (\n splits[i].percent == lockedSplit.percent && splits[i].beneficiary == lockedSplit.beneficiary\n && splits[i].hook == lockedSplit.hook && splits[i].projectId == lockedSplit.projectId\n && splits[i].preferAddToBalance == lockedSplit.preferAddToBalance\n // Allow the lock to be extended.\n && splits[i].lockedUntil >= lockedSplit.lockedUntil\n ) return true;\n }\n\n return false;\n }\n\n /// @notice Unpack an array of `JBSplit` structs for all of the splits in a group, given project, ruleset, and group\n /// IDs.\n /// @param projectId The ID of the project the splits belong to.\n /// @param rulesetId The ID of the ruleset the group of splits should be considered active within.\n /// @param groupId The ID of the group to get the splits structs of.\n /// @return splits The split structs, as an array of `JBSplit`s.\n function _getStructsFor(\n uint256 projectId,\n uint256 rulesetId,\n uint256 groupId\n )\n internal\n view\n returns (JBSplit[] memory)\n {\n // Get a reference to the number of splits that need to be added to the returned array.\n uint256 splitCount = _splitCountOf[projectId][rulesetId][groupId];\n\n // Initialize an array to be returned that has the appropriate length.\n JBSplit[] memory splits = new JBSplit[](splitCount);\n\n // Loop through each split and unpack the values into structs.\n for (uint256 i; i < splitCount; i++) {\n // Get a reference to the first part of the split's packed data.\n uint256 packedSplitPart1 = _packedSplitParts1Of[projectId][rulesetId][groupId][i];\n\n // Populate the split struct.\n JBSplit memory split;\n\n // `preferAddToBalance` in bit 0.\n split.preferAddToBalance = packedSplitPart1 & 1 == 1;\n // `percent` in bits 1-32.\n split.percent = uint256(uint32(packedSplitPart1 >> 1));\n // `projectId` in bits 33-88.\n split.projectId = uint256(uint56(packedSplitPart1 >> 33));\n // `beneficiary` in bits 89-248.\n split.beneficiary = payable(address(uint160(packedSplitPart1 >> 89)));\n\n // Get a reference to the second part of the split's packed data.\n uint256 packedSplitPart2 = _packedSplitParts2Of[projectId][rulesetId][groupId][i];\n\n // If there's anything in it, unpack.\n if (packedSplitPart2 > 0) {\n // `lockedUntil` in bits 0-47.\n split.lockedUntil = uint256(uint48(packedSplitPart2));\n // `hook` in bits 48-207.\n split.hook = IJBSplitHook(address(uint160(packedSplitPart2 >> 48)));\n }\n\n // Add the split to the value being returned.\n splits[i] = split;\n }\n\n return splits;\n }\n}\n" + }, + "src/abstract/JBControlled.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBControlled} from \"./../interfaces/IJBControlled.sol\";\nimport {IJBDirectory} from \"./../interfaces/IJBDirectory.sol\";\n\n/// @notice Provides a modifier for contracts with functionality that can only be accessed by a project's controller.\nabstract contract JBControlled is IJBControlled {\n //*********************************************************************//\n // --------------------------- custom errors -------------------------- //\n //*********************************************************************//\n error CONTROLLER_UNAUTHORIZED();\n\n //*********************************************************************//\n // ---------------------------- modifiers ---------------------------- //\n //*********************************************************************//\n\n /// @notice Only allows the controller of the specified project to proceed.\n /// @param projectId The ID of the project.\n modifier onlyControllerOf(uint256 projectId) {\n if (address(DIRECTORY.controllerOf(projectId)) != msg.sender) {\n revert CONTROLLER_UNAUTHORIZED();\n }\n _;\n }\n\n //*********************************************************************//\n // ---------------- public immutable stored properties --------------- //\n //*********************************************************************//\n\n /// @notice The directory of terminals and controllers for projects.\n IJBDirectory public immutable override DIRECTORY;\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param directory A contract storing directories of terminals and controllers for each project.\n constructor(IJBDirectory directory) {\n DIRECTORY = directory;\n }\n}\n" + }, + "src/interfaces/IJBControlled.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBDirectory} from \"./IJBDirectory.sol\";\n\ninterface IJBControlled {\n function DIRECTORY() external view returns (IJBDirectory);\n}\n" + }, + "src/interfaces/IJBSplitHook.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {JBSplitHookContext} from \"../structs/JBSplitHookContext.sol\";\n\n/// @title Split hook\n/// @notice Allows processing a single split with custom logic.\n/// @dev The split hook's address should be set as the `hook` in the relevant split.\ninterface IJBSplitHook is IERC165 {\n /// @notice If a split has a split hook, payment terminals and controllers call this function while processing the\n /// split.\n /// @dev Critical business logic should be protected by appropriate access control. The tokens and/or native tokens\n /// are optimistically transferred to the split hook when this function is called.\n /// @param context The context passed by the terminal/controller to the split hook as a `JBSplitHookContext` struct:\n function processSplitWith(JBSplitHookContext calldata context) external payable;\n}\n" + }, + "src/interfaces/IJBSplits.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBSplitGroup} from \"./../structs/JBSplitGroup.sol\";\nimport {JBSplit} from \"./../structs/JBSplit.sol\";\nimport {IJBProjects} from \"./IJBProjects.sol\";\nimport {IJBControlled} from \"./IJBControlled.sol\";\n\ninterface IJBSplits is IJBControlled {\n event SetSplit(\n uint256 indexed projectId, uint256 indexed rulesetId, uint256 indexed group, JBSplit split, address caller\n );\n\n function FALLBACK_RULESET_ID() external view returns (uint256);\n\n function splitsOf(uint256 projectId, uint256 rulesetId, uint256 group) external view returns (JBSplit[] memory);\n\n function setSplitGroupsOf(uint256 projectId, uint256 rulesetId, JBSplitGroup[] memory splitGroups) external;\n}\n" + }, + "src/libraries/JBConstants.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @notice Global constants used across Juicebox contracts.\nlibrary JBConstants {\n /// @notice Each chain's native token address in Juicebox is represented by\n /// 0x000000000000000000000000000000000000EEEe.\n address public constant NATIVE_TOKEN = address(0x000000000000000000000000000000000000EEEe);\n uint256 public constant MAX_RESERVED_RATE = 10_000;\n uint256 public constant MAX_REDEMPTION_RATE = 10_000;\n uint256 public constant MAX_DECAY_RATE = 1_000_000_000;\n uint256 public constant SPLITS_TOTAL_PERCENT = 1_000_000_000;\n uint256 public constant MAX_FEE = 1000;\n uint256 public constant MAX_FEE_DISCOUNT = 1_000_000_000;\n}\n" + }, + "src/structs/JBSplit.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBSplitHook} from \"./../interfaces/IJBSplitHook.sol\";\n\n/// @notice Splits are used to send a percentage of a total token amount to a specific contract, project, or address.\n/// Splits are used to send payouts and reserved tokens.\n/// @dev 1. If a non-zero split hook contract is specified, this split's tokens are sent there along with this split's\n/// properties.\n/// @dev 2. Otherwise, if a non-zero project ID is specified, this split's tokens are used to `pay` it through its\n/// terminal if possible, or sent to the project's owner if not. If this payment yields tokens, those go to the split's\n/// `beneficiary`.\n/// @dev 3. Otherwise, this split's tokens are sent directly to the `beneficiary`.\n/// @dev To summarize, this split's tokens are sent according to the following priority: `split hook` > `projectId` >\n/// `beneficiary`.\n/// @custom:member preferAddToBalance If this split were to `pay` a project through its terminal, this flag indicates\n/// whether it should prefer using the terminal's `addToBalance` function instead.\n/// @custom:member percent The percent of the total token amount that this split sends. This number is out of\n/// `JBConstants.SPLITS_TOTAL_PERCENT`.\n/// @custom:member projectId The ID of a project to `pay`, if applicable. Resulting tokens will be routed to the\n/// `beneficiary`.\n/// @custom:member beneficiary Receives this split's tokens if the `hook` and `projectId` are zero. If the `projectId`\n/// is specified, the `beneficiary` receives any project tokens minted by this split.\n/// @custom:member lockedUntil The split cannot be changed until this timestamp. The `lockedUntil` timestamp can be\n/// increased while a split is locked. If `lockedUntil` is zero, this split can be changed at any time.\n/// @custom:member hook A contract which will receive this split's tokens and properties, and can define custom\n/// behavior.\nstruct JBSplit {\n bool preferAddToBalance;\n uint256 percent;\n uint256 projectId;\n address payable beneficiary;\n uint256 lockedUntil;\n IJBSplitHook hook;\n}\n" + }, + "src/structs/JBSplitGroup.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBSplit} from \"./JBSplit.sol\";\n\n/// @custom:member groupId An identifier for the group.\n/// @custom:member splits The splits in the group.\nstruct JBSplitGroup {\n uint256 groupId;\n JBSplit[] splits;\n}\n" + }, + "src/structs/JBSplitHookContext.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBSplit} from \"./JBSplit.sol\";\n\n/// @custom:member token The token being sent to the split hook.\n/// @custom:member amount The amount being sent to the split hook, as a fixed point number.\n/// @custom:member decimals The number of decimals in the amount.\n/// @custom:member projectId The project the split belongs to.\n/// @custom:member groupId The group the split belongs to.\n/// @custom:member split The split which specified the hook.\nstruct JBSplitHookContext {\n address token;\n uint256 amount;\n uint256 decimals;\n uint256 projectId;\n uint256 groupId;\n JBSplit split;\n}\n" + }, + "node_modules/@prb/math/src/Common.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.19;\n\n// Common.sol\n//\n// Common mathematical functions used in both SD59x18 and UD60x18. Note that these global functions do not\n// always operate with SD59x18 and UD60x18 numbers.\n\n/*//////////////////////////////////////////////////////////////////////////\n CUSTOM ERRORS\n//////////////////////////////////////////////////////////////////////////*/\n\n/// @notice Thrown when the resultant value in {mulDiv} overflows uint256.\nerror PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator);\n\n/// @notice Thrown when the resultant value in {mulDiv18} overflows uint256.\nerror PRBMath_MulDiv18_Overflow(uint256 x, uint256 y);\n\n/// @notice Thrown when one of the inputs passed to {mulDivSigned} is `type(int256).min`.\nerror PRBMath_MulDivSigned_InputTooSmall();\n\n/// @notice Thrown when the resultant value in {mulDivSigned} overflows int256.\nerror PRBMath_MulDivSigned_Overflow(int256 x, int256 y);\n\n/*//////////////////////////////////////////////////////////////////////////\n CONSTANTS\n//////////////////////////////////////////////////////////////////////////*/\n\n/// @dev The maximum value a uint128 number can have.\nuint128 constant MAX_UINT128 = type(uint128).max;\n\n/// @dev The maximum value a uint40 number can have.\nuint40 constant MAX_UINT40 = type(uint40).max;\n\n/// @dev The unit number, which the decimal precision of the fixed-point types.\nuint256 constant UNIT = 1e18;\n\n/// @dev The unit number inverted mod 2^256.\nuint256 constant UNIT_INVERSE = 78156646155174841979727994598816262306175212592076161876661_508869554232690281;\n\n/// @dev The the largest power of two that divides the decimal value of `UNIT`. The logarithm of this value is the least significant\n/// bit in the binary representation of `UNIT`.\nuint256 constant UNIT_LPOTD = 262144;\n\n/*//////////////////////////////////////////////////////////////////////////\n FUNCTIONS\n//////////////////////////////////////////////////////////////////////////*/\n\n/// @notice Calculates the binary exponent of x using the binary fraction method.\n/// @dev Has to use 192.64-bit fixed-point numbers. See https://ethereum.stackexchange.com/a/96594/24693.\n/// @param x The exponent as an unsigned 192.64-bit fixed-point number.\n/// @return result The result as an unsigned 60.18-decimal fixed-point number.\n/// @custom:smtchecker abstract-function-nondet\nfunction exp2(uint256 x) pure returns (uint256 result) {\n unchecked {\n // Start from 0.5 in the 192.64-bit fixed-point format.\n result = 0x800000000000000000000000000000000000000000000000;\n\n // The following logic multiplies the result by $\\sqrt{2^{-i}}$ when the bit at position i is 1. Key points:\n //\n // 1. Intermediate results will not overflow, as the starting point is 2^191 and all magic factors are under 2^65.\n // 2. The rationale for organizing the if statements into groups of 8 is gas savings. If the result of performing\n // a bitwise AND operation between x and any value in the array [0x80; 0x40; 0x20; 0x10; 0x08; 0x04; 0x02; 0x01] is 1,\n // we know that `x & 0xFF` is also 1.\n if (x & 0xFF00000000000000 > 0) {\n if (x & 0x8000000000000000 > 0) {\n result = (result * 0x16A09E667F3BCC909) >> 64;\n }\n if (x & 0x4000000000000000 > 0) {\n result = (result * 0x1306FE0A31B7152DF) >> 64;\n }\n if (x & 0x2000000000000000 > 0) {\n result = (result * 0x1172B83C7D517ADCE) >> 64;\n }\n if (x & 0x1000000000000000 > 0) {\n result = (result * 0x10B5586CF9890F62A) >> 64;\n }\n if (x & 0x800000000000000 > 0) {\n result = (result * 0x1059B0D31585743AE) >> 64;\n }\n if (x & 0x400000000000000 > 0) {\n result = (result * 0x102C9A3E778060EE7) >> 64;\n }\n if (x & 0x200000000000000 > 0) {\n result = (result * 0x10163DA9FB33356D8) >> 64;\n }\n if (x & 0x100000000000000 > 0) {\n result = (result * 0x100B1AFA5ABCBED61) >> 64;\n }\n }\n\n if (x & 0xFF000000000000 > 0) {\n if (x & 0x80000000000000 > 0) {\n result = (result * 0x10058C86DA1C09EA2) >> 64;\n }\n if (x & 0x40000000000000 > 0) {\n result = (result * 0x1002C605E2E8CEC50) >> 64;\n }\n if (x & 0x20000000000000 > 0) {\n result = (result * 0x100162F3904051FA1) >> 64;\n }\n if (x & 0x10000000000000 > 0) {\n result = (result * 0x1000B175EFFDC76BA) >> 64;\n }\n if (x & 0x8000000000000 > 0) {\n result = (result * 0x100058BA01FB9F96D) >> 64;\n }\n if (x & 0x4000000000000 > 0) {\n result = (result * 0x10002C5CC37DA9492) >> 64;\n }\n if (x & 0x2000000000000 > 0) {\n result = (result * 0x1000162E525EE0547) >> 64;\n }\n if (x & 0x1000000000000 > 0) {\n result = (result * 0x10000B17255775C04) >> 64;\n }\n }\n\n if (x & 0xFF0000000000 > 0) {\n if (x & 0x800000000000 > 0) {\n result = (result * 0x1000058B91B5BC9AE) >> 64;\n }\n if (x & 0x400000000000 > 0) {\n result = (result * 0x100002C5C89D5EC6D) >> 64;\n }\n if (x & 0x200000000000 > 0) {\n result = (result * 0x10000162E43F4F831) >> 64;\n }\n if (x & 0x100000000000 > 0) {\n result = (result * 0x100000B1721BCFC9A) >> 64;\n }\n if (x & 0x80000000000 > 0) {\n result = (result * 0x10000058B90CF1E6E) >> 64;\n }\n if (x & 0x40000000000 > 0) {\n result = (result * 0x1000002C5C863B73F) >> 64;\n }\n if (x & 0x20000000000 > 0) {\n result = (result * 0x100000162E430E5A2) >> 64;\n }\n if (x & 0x10000000000 > 0) {\n result = (result * 0x1000000B172183551) >> 64;\n }\n }\n\n if (x & 0xFF00000000 > 0) {\n if (x & 0x8000000000 > 0) {\n result = (result * 0x100000058B90C0B49) >> 64;\n }\n if (x & 0x4000000000 > 0) {\n result = (result * 0x10000002C5C8601CC) >> 64;\n }\n if (x & 0x2000000000 > 0) {\n result = (result * 0x1000000162E42FFF0) >> 64;\n }\n if (x & 0x1000000000 > 0) {\n result = (result * 0x10000000B17217FBB) >> 64;\n }\n if (x & 0x800000000 > 0) {\n result = (result * 0x1000000058B90BFCE) >> 64;\n }\n if (x & 0x400000000 > 0) {\n result = (result * 0x100000002C5C85FE3) >> 64;\n }\n if (x & 0x200000000 > 0) {\n result = (result * 0x10000000162E42FF1) >> 64;\n }\n if (x & 0x100000000 > 0) {\n result = (result * 0x100000000B17217F8) >> 64;\n }\n }\n\n if (x & 0xFF000000 > 0) {\n if (x & 0x80000000 > 0) {\n result = (result * 0x10000000058B90BFC) >> 64;\n }\n if (x & 0x40000000 > 0) {\n result = (result * 0x1000000002C5C85FE) >> 64;\n }\n if (x & 0x20000000 > 0) {\n result = (result * 0x100000000162E42FF) >> 64;\n }\n if (x & 0x10000000 > 0) {\n result = (result * 0x1000000000B17217F) >> 64;\n }\n if (x & 0x8000000 > 0) {\n result = (result * 0x100000000058B90C0) >> 64;\n }\n if (x & 0x4000000 > 0) {\n result = (result * 0x10000000002C5C860) >> 64;\n }\n if (x & 0x2000000 > 0) {\n result = (result * 0x1000000000162E430) >> 64;\n }\n if (x & 0x1000000 > 0) {\n result = (result * 0x10000000000B17218) >> 64;\n }\n }\n\n if (x & 0xFF0000 > 0) {\n if (x & 0x800000 > 0) {\n result = (result * 0x1000000000058B90C) >> 64;\n }\n if (x & 0x400000 > 0) {\n result = (result * 0x100000000002C5C86) >> 64;\n }\n if (x & 0x200000 > 0) {\n result = (result * 0x10000000000162E43) >> 64;\n }\n if (x & 0x100000 > 0) {\n result = (result * 0x100000000000B1721) >> 64;\n }\n if (x & 0x80000 > 0) {\n result = (result * 0x10000000000058B91) >> 64;\n }\n if (x & 0x40000 > 0) {\n result = (result * 0x1000000000002C5C8) >> 64;\n }\n if (x & 0x20000 > 0) {\n result = (result * 0x100000000000162E4) >> 64;\n }\n if (x & 0x10000 > 0) {\n result = (result * 0x1000000000000B172) >> 64;\n }\n }\n\n if (x & 0xFF00 > 0) {\n if (x & 0x8000 > 0) {\n result = (result * 0x100000000000058B9) >> 64;\n }\n if (x & 0x4000 > 0) {\n result = (result * 0x10000000000002C5D) >> 64;\n }\n if (x & 0x2000 > 0) {\n result = (result * 0x1000000000000162E) >> 64;\n }\n if (x & 0x1000 > 0) {\n result = (result * 0x10000000000000B17) >> 64;\n }\n if (x & 0x800 > 0) {\n result = (result * 0x1000000000000058C) >> 64;\n }\n if (x & 0x400 > 0) {\n result = (result * 0x100000000000002C6) >> 64;\n }\n if (x & 0x200 > 0) {\n result = (result * 0x10000000000000163) >> 64;\n }\n if (x & 0x100 > 0) {\n result = (result * 0x100000000000000B1) >> 64;\n }\n }\n\n if (x & 0xFF > 0) {\n if (x & 0x80 > 0) {\n result = (result * 0x10000000000000059) >> 64;\n }\n if (x & 0x40 > 0) {\n result = (result * 0x1000000000000002C) >> 64;\n }\n if (x & 0x20 > 0) {\n result = (result * 0x10000000000000016) >> 64;\n }\n if (x & 0x10 > 0) {\n result = (result * 0x1000000000000000B) >> 64;\n }\n if (x & 0x8 > 0) {\n result = (result * 0x10000000000000006) >> 64;\n }\n if (x & 0x4 > 0) {\n result = (result * 0x10000000000000003) >> 64;\n }\n if (x & 0x2 > 0) {\n result = (result * 0x10000000000000001) >> 64;\n }\n if (x & 0x1 > 0) {\n result = (result * 0x10000000000000001) >> 64;\n }\n }\n\n // In the code snippet below, two operations are executed simultaneously:\n //\n // 1. The result is multiplied by $(2^n + 1)$, where $2^n$ represents the integer part, and the additional 1\n // accounts for the initial guess of 0.5. This is achieved by subtracting from 191 instead of 192.\n // 2. The result is then converted to an unsigned 60.18-decimal fixed-point format.\n //\n // The underlying logic is based on the relationship $2^{191-ip} = 2^{ip} / 2^{191}$, where $ip$ denotes the,\n // integer part, $2^n$.\n result *= UNIT;\n result >>= (191 - (x >> 64));\n }\n}\n\n/// @notice Finds the zero-based index of the first 1 in the binary representation of x.\n///\n/// @dev See the note on \"msb\" in this Wikipedia article: https://en.wikipedia.org/wiki/Find_first_set\n///\n/// Each step in this implementation is equivalent to this high-level code:\n///\n/// ```solidity\n/// if (x >= 2 ** 128) {\n/// x >>= 128;\n/// result += 128;\n/// }\n/// ```\n///\n/// Where 128 is replaced with each respective power of two factor. See the full high-level implementation here:\n/// https://gist.github.com/PaulRBerg/f932f8693f2733e30c4d479e8e980948\n///\n/// The Yul instructions used below are:\n///\n/// - \"gt\" is \"greater than\"\n/// - \"or\" is the OR bitwise operator\n/// - \"shl\" is \"shift left\"\n/// - \"shr\" is \"shift right\"\n///\n/// @param x The uint256 number for which to find the index of the most significant bit.\n/// @return result The index of the most significant bit as a uint256.\n/// @custom:smtchecker abstract-function-nondet\nfunction msb(uint256 x) pure returns (uint256 result) {\n // 2^128\n assembly (\"memory-safe\") {\n let factor := shl(7, gt(x, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\n x := shr(factor, x)\n result := or(result, factor)\n }\n // 2^64\n assembly (\"memory-safe\") {\n let factor := shl(6, gt(x, 0xFFFFFFFFFFFFFFFF))\n x := shr(factor, x)\n result := or(result, factor)\n }\n // 2^32\n assembly (\"memory-safe\") {\n let factor := shl(5, gt(x, 0xFFFFFFFF))\n x := shr(factor, x)\n result := or(result, factor)\n }\n // 2^16\n assembly (\"memory-safe\") {\n let factor := shl(4, gt(x, 0xFFFF))\n x := shr(factor, x)\n result := or(result, factor)\n }\n // 2^8\n assembly (\"memory-safe\") {\n let factor := shl(3, gt(x, 0xFF))\n x := shr(factor, x)\n result := or(result, factor)\n }\n // 2^4\n assembly (\"memory-safe\") {\n let factor := shl(2, gt(x, 0xF))\n x := shr(factor, x)\n result := or(result, factor)\n }\n // 2^2\n assembly (\"memory-safe\") {\n let factor := shl(1, gt(x, 0x3))\n x := shr(factor, x)\n result := or(result, factor)\n }\n // 2^1\n // No need to shift x any more.\n assembly (\"memory-safe\") {\n let factor := gt(x, 0x1)\n result := or(result, factor)\n }\n}\n\n/// @notice Calculates x*y÷denominator with 512-bit precision.\n///\n/// @dev Credits to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv.\n///\n/// Notes:\n/// - The result is rounded toward zero.\n///\n/// Requirements:\n/// - The denominator must not be zero.\n/// - The result must fit in uint256.\n///\n/// @param x The multiplicand as a uint256.\n/// @param y The multiplier as a uint256.\n/// @param denominator The divisor as a uint256.\n/// @return result The result as a uint256.\n/// @custom:smtchecker abstract-function-nondet\nfunction mulDiv(uint256 x, uint256 y, uint256 denominator) pure returns (uint256 result) {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512-bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly (\"memory-safe\") {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n unchecked {\n return prod0 / denominator;\n }\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (prod1 >= denominator) {\n revert PRBMath_MulDiv_Overflow(x, y, denominator);\n }\n\n ////////////////////////////////////////////////////////////////////////////\n // 512 by 256 division\n ////////////////////////////////////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly (\"memory-safe\") {\n // Compute remainder using the mulmod Yul instruction.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512-bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n unchecked {\n // Calculate the largest power of two divisor of the denominator using the unary operator ~. This operation cannot overflow\n // because the denominator cannot be zero at this point in the function execution. The result is always >= 1.\n // For more detail, see https://cs.stackexchange.com/q/138556/92363.\n uint256 lpotdod = denominator & (~denominator + 1);\n uint256 flippedLpotdod;\n\n assembly (\"memory-safe\") {\n // Factor powers of two out of denominator.\n denominator := div(denominator, lpotdod)\n\n // Divide [prod1 prod0] by lpotdod.\n prod0 := div(prod0, lpotdod)\n\n // Get the flipped value `2^256 / lpotdod`. If the `lpotdod` is zero, the flipped value is one.\n // `sub(0, lpotdod)` produces the two's complement version of `lpotdod`, which is equivalent to flipping all the bits.\n // However, `div` interprets this value as an unsigned value: https://ethereum.stackexchange.com/q/147168/24693\n flippedLpotdod := add(div(sub(0, lpotdod), lpotdod), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * flippedLpotdod;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n }\n}\n\n/// @notice Calculates x*y÷1e18 with 512-bit precision.\n///\n/// @dev A variant of {mulDiv} with constant folding, i.e. in which the denominator is hard coded to 1e18.\n///\n/// Notes:\n/// - The body is purposely left uncommented; to understand how this works, see the documentation in {mulDiv}.\n/// - The result is rounded toward zero.\n/// - We take as an axiom that the result cannot be `MAX_UINT256` when x and y solve the following system of equations:\n///\n/// $$\n/// \\begin{cases}\n/// x * y = MAX\\_UINT256 * UNIT \\\\\n/// (x * y) \\% UNIT \\geq \\frac{UNIT}{2}\n/// \\end{cases}\n/// $$\n///\n/// Requirements:\n/// - Refer to the requirements in {mulDiv}.\n/// - The result must fit in uint256.\n///\n/// @param x The multiplicand as an unsigned 60.18-decimal fixed-point number.\n/// @param y The multiplier as an unsigned 60.18-decimal fixed-point number.\n/// @return result The result as an unsigned 60.18-decimal fixed-point number.\n/// @custom:smtchecker abstract-function-nondet\nfunction mulDiv18(uint256 x, uint256 y) pure returns (uint256 result) {\n uint256 prod0;\n uint256 prod1;\n assembly (\"memory-safe\") {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n if (prod1 == 0) {\n unchecked {\n return prod0 / UNIT;\n }\n }\n\n if (prod1 >= UNIT) {\n revert PRBMath_MulDiv18_Overflow(x, y);\n }\n\n uint256 remainder;\n assembly (\"memory-safe\") {\n remainder := mulmod(x, y, UNIT)\n result :=\n mul(\n or(\n div(sub(prod0, remainder), UNIT_LPOTD),\n mul(sub(prod1, gt(remainder, prod0)), add(div(sub(0, UNIT_LPOTD), UNIT_LPOTD), 1))\n ),\n UNIT_INVERSE\n )\n }\n}\n\n/// @notice Calculates x*y÷denominator with 512-bit precision.\n///\n/// @dev This is an extension of {mulDiv} for signed numbers, which works by computing the signs and the absolute values separately.\n///\n/// Notes:\n/// - The result is rounded toward zero.\n///\n/// Requirements:\n/// - Refer to the requirements in {mulDiv}.\n/// - None of the inputs can be `type(int256).min`.\n/// - The result must fit in int256.\n///\n/// @param x The multiplicand as an int256.\n/// @param y The multiplier as an int256.\n/// @param denominator The divisor as an int256.\n/// @return result The result as an int256.\n/// @custom:smtchecker abstract-function-nondet\nfunction mulDivSigned(int256 x, int256 y, int256 denominator) pure returns (int256 result) {\n if (x == type(int256).min || y == type(int256).min || denominator == type(int256).min) {\n revert PRBMath_MulDivSigned_InputTooSmall();\n }\n\n // Get hold of the absolute values of x, y and the denominator.\n uint256 xAbs;\n uint256 yAbs;\n uint256 dAbs;\n unchecked {\n xAbs = x < 0 ? uint256(-x) : uint256(x);\n yAbs = y < 0 ? uint256(-y) : uint256(y);\n dAbs = denominator < 0 ? uint256(-denominator) : uint256(denominator);\n }\n\n // Compute the absolute value of x*y÷denominator. The result must fit in int256.\n uint256 resultAbs = mulDiv(xAbs, yAbs, dAbs);\n if (resultAbs > uint256(type(int256).max)) {\n revert PRBMath_MulDivSigned_Overflow(x, y);\n }\n\n // Get the signs of x, y and the denominator.\n uint256 sx;\n uint256 sy;\n uint256 sd;\n assembly (\"memory-safe\") {\n // \"sgt\" is the \"signed greater than\" assembly instruction and \"sub(0,1)\" is -1 in two's complement.\n sx := sgt(x, sub(0, 1))\n sy := sgt(y, sub(0, 1))\n sd := sgt(denominator, sub(0, 1))\n }\n\n // XOR over sx, sy and sd. What this does is to check whether there are 1 or 3 negative signs in the inputs.\n // If there are, the result should be negative. Otherwise, it should be positive.\n unchecked {\n result = sx ^ sy ^ sd == 0 ? -int256(resultAbs) : int256(resultAbs);\n }\n}\n\n/// @notice Calculates the square root of x using the Babylonian method.\n///\n/// @dev See https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method.\n///\n/// Notes:\n/// - If x is not a perfect square, the result is rounded down.\n/// - Credits to OpenZeppelin for the explanations in comments below.\n///\n/// @param x The uint256 number for which to calculate the square root.\n/// @return result The result as a uint256.\n/// @custom:smtchecker abstract-function-nondet\nfunction sqrt(uint256 x) pure returns (uint256 result) {\n if (x == 0) {\n return 0;\n }\n\n // For our first guess, we calculate the biggest power of 2 which is smaller than the square root of x.\n //\n // We know that the \"msb\" (most significant bit) of x is a power of 2 such that we have:\n //\n // $$\n // msb(x) <= x <= 2*msb(x)$\n // $$\n //\n // We write $msb(x)$ as $2^k$, and we get:\n //\n // $$\n // k = log_2(x)\n // $$\n //\n // Thus, we can write the initial inequality as:\n //\n // $$\n // 2^{log_2(x)} <= x <= 2*2^{log_2(x)+1} \\\\\n // sqrt(2^k) <= sqrt(x) < sqrt(2^{k+1}) \\\\\n // 2^{k/2} <= sqrt(x) < 2^{(k+1)/2} <= 2^{(k/2)+1}\n // $$\n //\n // Consequently, $2^{log_2(x) /2} is a good first approximation of sqrt(x) with at least one correct bit.\n uint256 xAux = uint256(x);\n result = 1;\n if (xAux >= 2 ** 128) {\n xAux >>= 128;\n result <<= 64;\n }\n if (xAux >= 2 ** 64) {\n xAux >>= 64;\n result <<= 32;\n }\n if (xAux >= 2 ** 32) {\n xAux >>= 32;\n result <<= 16;\n }\n if (xAux >= 2 ** 16) {\n xAux >>= 16;\n result <<= 8;\n }\n if (xAux >= 2 ** 8) {\n xAux >>= 8;\n result <<= 4;\n }\n if (xAux >= 2 ** 4) {\n xAux >>= 4;\n result <<= 2;\n }\n if (xAux >= 2 ** 2) {\n result <<= 1;\n }\n\n // At this point, `result` is an estimation with at least one bit of precision. We know the true value has at\n // most 128 bits, since it is the square root of a uint256. Newton's method converges quadratically (precision\n // doubles at every iteration). We thus need at most 7 iteration to turn our partial result with one bit of\n // precision into the expected uint128 result.\n unchecked {\n result = (result + x / result) >> 1;\n result = (result + x / result) >> 1;\n result = (result + x / result) >> 1;\n result = (result + x / result) >> 1;\n result = (result + x / result) >> 1;\n result = (result + x / result) >> 1;\n result = (result + x / result) >> 1;\n\n // If x is not a perfect square, round the result toward zero.\n uint256 roundedResult = x / result;\n if (result >= roundedResult) {\n result = roundedResult;\n }\n }\n}\n" + }, + "src/JBRulesets.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {mulDiv} from \"@prb/math/src/Common.sol\";\nimport {JBControlled} from \"./abstract/JBControlled.sol\";\nimport {JBApprovalStatus} from \"./enums/JBApprovalStatus.sol\";\nimport {JBConstants} from \"./libraries/JBConstants.sol\";\nimport {IJBDirectory} from \"./interfaces/IJBDirectory.sol\";\nimport {IJBRulesetApprovalHook} from \"./interfaces/IJBRulesetApprovalHook.sol\";\nimport {IJBRulesets} from \"./interfaces/IJBRulesets.sol\";\nimport {JBRuleset} from \"./structs/JBRuleset.sol\";\nimport {JBRulesetWeightCache} from \"./structs/JBRulesetWeightCache.sol\";\n\n/// @notice Manages rulesets and queuing.\n/// @dev Rulesets dictate how a project behaves for a period of time. To learn more about their functionality, see the\n/// `JBRuleset` data structure.\n/// @dev Throughout this contract, `rulesetId` is an identifier for each ruleset. The `rulesetId` is the unix timestamp\n/// when the ruleset was initialized.\n/// @dev `approvable` means a ruleset which may or may not be approved.\ncontract JBRulesets is JBControlled, IJBRulesets {\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n error INVALID_RULESET_APPROVAL_HOOK();\n error INVALID_DECAY_RATE();\n error INVALID_RULESET_DURATION();\n error INVALID_RULESET_END_TIME();\n error INVALID_WEIGHT();\n error BLOCK_ALREADY_CONTAINS_RULESET();\n\n //*********************************************************************//\n // ------------------------- internal constants ----------------------- //\n //*********************************************************************//\n\n /// @notice The maximum number of decay rate multiples that can be cached at a time.\n uint256 internal constant _MAX_DECAY_MULTIPLE_CACHE_THRESHOLD = 50_000;\n\n /// @notice The number of decay rate multiples before a cached value is sought.\n uint256 internal constant _DECAY_MULTIPLE_CACHE_LOOKUP_THRESHOLD = 1000;\n\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice The ID of the ruleset with the latest start time for a specific project, whether the ruleset has been\n /// approved or not.\n /// @dev If a project has multiple rulesets queued, the `latestRulesetIdOf` will be the last one. This is the\n /// \"changeable\" cycle.\n /// @custom:param projectId The ID of the project to get the latest ruleset ID of.\n /// @return latestRulesetIdOf The `rulesetId` of the project's latest ruleset.\n mapping(uint256 projectId => uint256) public override latestRulesetIdOf;\n\n //*********************************************************************//\n // --------------------- internal stored properties ------------------- //\n //*********************************************************************//\n\n /// @notice The user-defined properties of each ruleset, packed into one storage slot.\n /// @custom:param projectId The ID of the project to get the user-defined properties of.\n /// @custom:param rulesetId The ID of the ruleset to get the user-defined properties of.\n mapping(uint256 projectId => mapping(uint256 rulesetId => uint256)) internal _packedUserPropertiesOf;\n\n /// @notice The mechanism-added properties to manage and schedule each ruleset, packed into one storage slot.\n /// @custom:param projectId The ID of the project to get the intrinsic properties of.\n /// @custom:param rulesetId The ID of the ruleset to get the intrinsic properties of.\n mapping(uint256 projectId => mapping(uint256 rulesetId => uint256)) internal _packedIntrinsicPropertiesOf;\n\n /// @notice The metadata for each ruleset, packed into one storage slot.\n /// @custom:param projectId The ID of the project to get metadata of.\n /// @custom:param rulesetId The ID of the ruleset to get metadata of.\n mapping(uint256 projectId => mapping(uint256 rulesetId => uint256)) internal _metadataOf;\n\n /// @notice Cached weight values to derive rulesets from.\n /// @custom:param projectId The ID of the project to which the cache applies.\n /// @custom:param rulesetId The ID of the ruleset to which the cache applies.\n mapping(uint256 projectId => mapping(uint256 rulesetId => JBRulesetWeightCache)) internal _weightCacheOf;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice Get the ruleset struct for a given `rulesetId` and `projectId`.\n /// @param projectId The ID of the project to which the ruleset belongs.\n /// @param rulesetId The ID of the ruleset to get the struct of.\n /// @return ruleset The ruleset struct.\n function getRulesetOf(\n uint256 projectId,\n uint256 rulesetId\n )\n external\n view\n override\n returns (JBRuleset memory ruleset)\n {\n return _getStructFor(projectId, rulesetId);\n }\n\n /// @notice The latest ruleset queued for a project. Returns the ruleset's struct and its current approval status.\n /// @dev Returns struct and status for the ruleset initialized furthest in the future (at the end of the rulset\n /// queue).\n /// @param projectId The ID of the project to get the latest queued ruleset of.\n /// @return ruleset The project's latest queued ruleset's struct.\n /// @return approvalStatus The approval hook's status for the ruleset.\n function latestQueuedRulesetOf(uint256 projectId)\n external\n view\n override\n returns (JBRuleset memory ruleset, JBApprovalStatus approvalStatus)\n {\n // Get a reference to the latest ruleset's ID.\n uint256 rulesetId = latestRulesetIdOf[projectId];\n\n // Resolve the struct for the latest ruleset.\n ruleset = _getStructFor(projectId, rulesetId);\n\n // Resolve the approval status.\n approvalStatus = _approvalStatusOf({\n projectId: projectId,\n rulesetId: ruleset.id,\n start: ruleset.start,\n approvalHookRulesetId: ruleset.basedOnId\n });\n }\n\n /// @notice Get an array of a project's rulesets up to a maximum array size, sorted from latest to earliest.\n /// @param projectId The ID of the project to get the rulesets of.\n /// @param startingId The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is\n /// passed, the project's latest ruleset will be used.\n /// @param size The maximum number of rulesets to return.\n /// @return rulesets The rulesets as an array of `JBRuleset` structs.\n function rulesetsOf(\n uint256 projectId,\n uint256 startingId,\n uint256 size\n )\n external\n view\n override\n returns (JBRuleset[] memory rulesets)\n {\n // If no starting ID was provided, set it to the latest ruleset's ID.\n if (startingId == 0) startingId = latestRulesetIdOf[projectId];\n\n // Keep a reference to the number of rulesets being returned.\n uint256 count = 0;\n\n // Keep a reference to the starting ruleset.\n JBRuleset memory ruleset = _getStructFor(projectId, startingId);\n\n // First, count the number of rulesets to include in the result by iterating backwards from the starting\n // ruleset.\n while (ruleset.id != 0 && count < size) {\n // Increment the counter.\n count++;\n\n // Iterate to the ruleset it was based on.\n ruleset = _getStructFor(projectId, ruleset.basedOnId);\n }\n\n // Keep a reference to the array of rulesets that'll be populated.\n rulesets = new JBRuleset[](count);\n\n // Return an empty array if there are no rulesets to return.\n if (count == 0) {\n return rulesets;\n }\n\n // Reset the ruleset being iterated on to the starting ruleset.\n ruleset = _getStructFor(projectId, startingId);\n\n // Set the counter.\n uint256 i;\n\n // Populate the array of rulesets to return.\n while (i < count) {\n // Add the ruleset to the array.\n rulesets[i++] = ruleset;\n\n // Get the ruleset it was based on if needed.\n if (i != count) ruleset = _getStructFor(projectId, ruleset.basedOnId);\n }\n }\n\n /// @notice The ruleset that's up next for a project.\n /// @dev If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.\n /// @param projectId The ID of the project to get the upcoming ruleset of.\n /// @return ruleset The struct for the project's upcoming ruleset.\n function upcomingRulesetOf(uint256 projectId) external view override returns (JBRuleset memory ruleset) {\n // If the project does not have a latest ruleset, return an empty struct.\n // slither-disable-next-line incorrect-equality\n if (latestRulesetIdOf[projectId] == 0) return _getStructFor(0, 0);\n\n // Get a reference to the upcoming approvable ruleset's ID.\n uint256 upcomingApprovableRulesetId = _upcomingApprovableRulesetIdOf(projectId);\n\n // Keep a reference to its approval status.\n JBApprovalStatus approvalStatus;\n\n // If an upcoming approvable ruleset has been queued, and it's approval status is Approved or ApprovalExpected,\n // return its ruleset struct\n if (upcomingApprovableRulesetId != 0) {\n ruleset = _getStructFor(projectId, upcomingApprovableRulesetId);\n\n // Get a reference to the approval status.\n approvalStatus = _approvalStatusOf(projectId, ruleset);\n\n // If the approval hook is empty, expects approval, or has approved the ruleset, return it.\n if (\n approvalStatus == JBApprovalStatus.Approved || approvalStatus == JBApprovalStatus.ApprovalExpected\n || approvalStatus == JBApprovalStatus.Empty\n ) return ruleset;\n\n // Resolve the ruleset for the ruleset the upcoming approvable ruleset was based on.\n ruleset = _getStructFor(projectId, ruleset.basedOnId);\n } else {\n // Resolve the ruleset for the latest queued ruleset.\n ruleset = _getStructFor(projectId, latestRulesetIdOf[projectId]);\n\n // If the latest ruleset starts in the future, it must start in the distant future\n // Since its not the upcoming approvable ruleset. In this case, base the upcoming ruleset on the base\n // ruleset.\n while (ruleset.start > block.timestamp) {\n ruleset = _getStructFor(projectId, ruleset.basedOnId);\n }\n }\n\n // There's no queued if the current has a duration of 0.\n if (ruleset.duration == 0) return _getStructFor(0, 0);\n\n // Get a reference to the approval status.\n approvalStatus = _approvalStatusOf(projectId, ruleset);\n\n // Check to see if this ruleset's approval hook hasn't failed.\n // If so, return a ruleset based on it.\n if (approvalStatus == JBApprovalStatus.Approved || approvalStatus == JBApprovalStatus.Empty) {\n return _simulateCycledRulesetBasedOn({projectId: projectId, baseRuleset: ruleset, allowMidRuleset: false});\n }\n\n // Get the ruleset of its base ruleset, which carries the last approved configuration.\n ruleset = _getStructFor(projectId, ruleset.basedOnId);\n\n // There's no queued if the base, which must still be the current, has a duration of 0.\n if (ruleset.duration == 0) return _getStructFor(0, 0);\n\n // Return a simulated cycled ruleset.\n return _simulateCycledRulesetBasedOn({projectId: projectId, baseRuleset: ruleset, allowMidRuleset: false});\n }\n\n /// @notice The ruleset that is currently active for the specified project.\n /// @dev If a current ruleset of the project is not found, returns an empty ruleset with all properties set to 0.\n /// @param projectId The ID of the project to get the current ruleset of.\n /// @return ruleset The project's current ruleset.\n function currentOf(uint256 projectId) external view override returns (JBRuleset memory ruleset) {\n // If the project does not have a ruleset, return an empty struct.\n // slither-disable-next-line incorrect-equality\n if (latestRulesetIdOf[projectId] == 0) return _getStructFor(0, 0);\n\n // Get a reference to the currently approvable ruleset's ID.\n uint256 rulesetId = _currentlyApprovableRulesetIdOf(projectId);\n\n // If a currently approvable ruleset exists...\n if (rulesetId != 0) {\n // Resolve the struct for the currently approvable ruleset.\n ruleset = _getStructFor(projectId, rulesetId);\n\n // Get a reference to the approval status.\n JBApprovalStatus approvalStatus = _approvalStatusOf(projectId, ruleset);\n\n // Check to see if this ruleset's approval hook is approved if it exists.\n // If so, return it.\n if (approvalStatus == JBApprovalStatus.Approved || approvalStatus == JBApprovalStatus.Empty) {\n return ruleset;\n }\n\n // If it hasn't been approved, set the ruleset configuration to be the configuration of the ruleset that\n // it's based on,\n // which carries the last approved configuration.\n rulesetId = ruleset.basedOnId;\n\n // Keep a reference to its ruleset.\n ruleset = _getStructFor(projectId, rulesetId);\n } else {\n // No upcoming ruleset found that is currently approvable,\n // so use the latest ruleset ID.\n rulesetId = latestRulesetIdOf[projectId];\n\n // Get the struct for the latest ID.\n ruleset = _getStructFor(projectId, rulesetId);\n\n // Get a reference to the approval status.\n JBApprovalStatus approvalStatus = _approvalStatusOf(projectId, ruleset);\n\n // While the ruleset has a approval hook that isn't approved or if it hasn't yet started, get a reference to\n // the ruleset that the latest is based on, which has the latest approved configuration.\n while (\n (approvalStatus != JBApprovalStatus.Approved && approvalStatus != JBApprovalStatus.Empty)\n || block.timestamp < ruleset.start\n ) {\n rulesetId = ruleset.basedOnId;\n ruleset = _getStructFor(projectId, rulesetId);\n approvalStatus = _approvalStatusOf(projectId, ruleset);\n }\n }\n\n // If the base has no duration, it's still the current one.\n if (ruleset.duration == 0) return ruleset;\n\n // Return a simulation of the current ruleset.\n return _simulateCycledRulesetBasedOn({projectId: projectId, baseRuleset: ruleset, allowMidRuleset: true});\n }\n\n /// @notice The current approval status of a given project's latest ruleset.\n /// @param projectId The ID of the project to check the approval status of.\n /// @return The project's current approval status.\n function currentApprovalStatusForLatestRulesetOf(uint256 projectId)\n external\n view\n override\n returns (JBApprovalStatus)\n {\n // Get a reference to the latest ruleset ID.\n uint256 rulesetId = latestRulesetIdOf[projectId];\n\n // Resolve the struct for the latest ruleset.\n JBRuleset memory ruleset = _getStructFor(projectId, rulesetId);\n\n return _approvalStatusOf({\n projectId: projectId,\n rulesetId: ruleset.id,\n start: ruleset.start,\n approvalHookRulesetId: ruleset.basedOnId\n });\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param directory A contract storing directories of terminals and controllers for each project.\n // solhint-disable-next-line no-empty-blocks\n constructor(IJBDirectory directory) JBControlled(directory) {}\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Queues the upcoming approvable ruleset for the specified project.\n /// @dev Only a project's current controller can queue its rulesets.\n /// @param projectId The ID of the project the ruleset is being queued for.\n /// @param duration The number of seconds the ruleset lasts for, after which a new ruleset will start. A\n /// duration of 0 means that the ruleset will stay active until the project owner explicitly issues a\n /// reconfiguration,\n /// at which point a new ruleset will immediately start with the updated properties. If the duration is greater than\n /// 0,\n /// a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will\n /// apply\n /// to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same\n /// properties\n /// but new `start` timestamp and a decayed `weight`.\n /// @param weight A fixed point number with 18 decimals that contracts can use to base arbitrary calculations\n /// on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is\n /// received.\n /// @param decayRate A percent by how much the `weight` of the subsequent ruleset should be reduced, if the\n /// project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have\n /// equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of\n /// `JBConstants.MAX_DECAY_RATE`.\n /// @param approvalHook An address of a contract that says whether a proposed ruleset should be accepted or\n /// rejected. It\n /// can be used to create rules around how a project owner can change ruleset parameters over time.\n /// @param metadata Arbitrary extra data to associate with this ruleset. This metadata is not used by `JBRulesets`.\n /// @param mustStartAtOrAfter The earliest time the ruleset can start. The ruleset cannot start before this\n /// timestamp.\n /// @return The struct of the new ruleset.\n function queueFor(\n uint256 projectId,\n uint256 duration,\n uint256 weight,\n uint256 decayRate,\n IJBRulesetApprovalHook approvalHook,\n uint256 metadata,\n uint256 mustStartAtOrAfter\n )\n external\n override\n onlyControllerOf(projectId)\n returns (JBRuleset memory)\n {\n // Duration must fit in a uint32.\n if (duration > type(uint32).max) revert INVALID_RULESET_DURATION();\n\n // Decay rate must be less than or equal to 100%.\n if (decayRate > JBConstants.MAX_DECAY_RATE) {\n revert INVALID_DECAY_RATE();\n }\n\n // Weight must fit into a uint88.\n if (weight > type(uint88).max) revert INVALID_WEIGHT();\n\n // If the start date is not set, set it to be the current timestamp.\n if (mustStartAtOrAfter == 0) {\n mustStartAtOrAfter = block.timestamp;\n }\n\n // Make sure the min start date fits in a uint56, and that the start date of the following ruleset will also fit\n // within the max.\n if (mustStartAtOrAfter + duration > type(uint56).max) {\n revert INVALID_RULESET_END_TIME();\n }\n\n // Approval hook should be a valid contract, supporting the correct interface\n if (approvalHook != IJBRulesetApprovalHook(address(0))) {\n // Revert if there isn't a contract at the address\n if (address(approvalHook).code.length == 0) revert INVALID_RULESET_APPROVAL_HOOK();\n\n // Make sure the approval hook supports the expected interface.\n try approvalHook.supportsInterface(type(IJBRulesetApprovalHook).interfaceId) returns (bool doesSupport) {\n if (!doesSupport) revert INVALID_RULESET_APPROVAL_HOOK(); // Contract exists at the address but with the\n // wrong interface\n } catch {\n revert INVALID_RULESET_APPROVAL_HOOK(); // No ERC165 support\n }\n }\n\n // Get a reference to the latest ruleset's ID.\n uint256 latestId = latestRulesetIdOf[projectId];\n\n // The new rulesetId timestamp is now, or an increment from now if the current timestamp is taken.\n uint256 rulesetId = latestId >= block.timestamp ? latestId + 1 : block.timestamp;\n\n // Set up the ruleset by configuring intrinsic properties.\n _configureIntrinsicPropertiesFor(projectId, rulesetId, weight, mustStartAtOrAfter);\n\n // Efficiently stores the ruleset's user-defined properties.\n // If all user config properties are zero, no need to store anything as the default value will have the same\n // outcome.\n if (approvalHook != IJBRulesetApprovalHook(address(0)) || duration > 0 || decayRate > 0) {\n // approval hook in bits 0-159 bytes.\n uint256 packed = uint160(address(approvalHook));\n\n // duration in bits 160-191 bytes.\n packed |= duration << 160;\n\n // decayRate in bits 192-223 bytes.\n packed |= decayRate << 192;\n\n // Set in storage.\n _packedUserPropertiesOf[projectId][rulesetId] = packed;\n }\n\n // Set the metadata if needed.\n if (metadata > 0) _metadataOf[projectId][rulesetId] = metadata;\n\n emit RulesetQueued(\n rulesetId, projectId, duration, weight, decayRate, approvalHook, metadata, mustStartAtOrAfter, msg.sender\n );\n\n // Return the struct for the new ruleset's ID.\n return _getStructFor(projectId, rulesetId);\n }\n\n /// @notice Cache the value of the ruleset weight.\n /// @param projectId The ID of the project having its ruleset weight cached.\n function updateRulesetWeightCache(uint256 projectId) external override {\n // Keep a reference to the struct for the latest queued ruleset.\n // The cached value will be based on this struct.\n JBRuleset memory latestQueuedRuleset = _getStructFor(projectId, latestRulesetIdOf[projectId]);\n\n // Nothing to cache if the latest ruleset doesn't have a duration or a decay rate.\n if (latestQueuedRuleset.duration == 0 || latestQueuedRuleset.decayRate == 0) return;\n\n // Get a reference to the current cache.\n JBRulesetWeightCache storage cache = _weightCacheOf[projectId][latestQueuedRuleset.id];\n\n // Determine the largest start timestamp the cache can be filled to.\n uint256 maxStart = latestQueuedRuleset.start\n + (cache.decayMultiple + _MAX_DECAY_MULTIPLE_CACHE_THRESHOLD) * latestQueuedRuleset.duration;\n\n // Determine the start timestamp to derive a weight from for the cache.\n uint256 start = block.timestamp < maxStart ? block.timestamp : maxStart;\n\n // The difference between the start of the latest queued ruleset and the start of the ruleset we're caching the\n // weight of.\n uint256 startDistance = start - latestQueuedRuleset.start;\n\n // Calculate the decay multiple.\n uint256 decayMultiple;\n unchecked {\n decayMultiple = startDistance / latestQueuedRuleset.duration;\n }\n\n // Store the new values.\n cache.weight = _deriveWeightFrom({projectId: projectId, baseRuleset: latestQueuedRuleset, start: start});\n cache.decayMultiple = decayMultiple;\n }\n\n //*********************************************************************//\n // --------------------- internal helper functions ------------------- //\n //*********************************************************************//\n\n /// @notice Updates the latest ruleset for this project if it exists. If there is no ruleset, initializes one.\n /// @param projectId The ID of the project to update the latest ruleset for.\n /// @param rulesetId The timestamp of when the ruleset was queued.\n /// @param weight The weight to store in the queued ruleset.\n /// @param mustStartAtOrAfter The earliest time the ruleset can start. The ruleset cannot start before this\n /// timestamp.\n function _configureIntrinsicPropertiesFor(\n uint256 projectId,\n uint256 rulesetId,\n uint256 weight,\n uint256 mustStartAtOrAfter\n )\n internal\n {\n // Keep a reference to the project's latest ruleset's ID.\n uint256 latestId = latestRulesetIdOf[projectId];\n\n // If the project doesn't have a ruleset yet, initialize one.\n // slither-disable-next-line incorrect-equality\n if (latestId == 0) {\n // Use an empty ruleset as the base.\n return _initializeRulesetFor({\n projectId: projectId,\n baseRuleset: _getStructFor(0, 0),\n rulesetId: rulesetId,\n mustStartAtOrAfter: mustStartAtOrAfter,\n weight: weight\n });\n }\n\n // Get a reference to the latest ruleset's struct.\n JBRuleset memory baseRuleset = _getStructFor(projectId, latestId);\n\n // Get a reference to the approval status.\n JBApprovalStatus approvalStatus = _approvalStatusOf(projectId, baseRuleset);\n\n // If the base ruleset has started but wasn't approved if a approval hook exists\n // OR it hasn't started but is currently approved\n // OR it hasn't started but it is likely to be approved and takes place before the proposed one,\n // set the struct to be the ruleset it's based on, which carries the latest approved ruleset.\n if (\n (\n block.timestamp >= baseRuleset.start && approvalStatus != JBApprovalStatus.Approved\n && approvalStatus != JBApprovalStatus.Empty\n )\n || (\n block.timestamp < baseRuleset.start && mustStartAtOrAfter < baseRuleset.start + baseRuleset.duration\n && approvalStatus != JBApprovalStatus.Approved\n )\n || (\n block.timestamp < baseRuleset.start && mustStartAtOrAfter >= baseRuleset.start + baseRuleset.duration\n && approvalStatus != JBApprovalStatus.Approved && approvalStatus != JBApprovalStatus.ApprovalExpected\n && approvalStatus != JBApprovalStatus.Empty\n )\n ) {\n baseRuleset = _getStructFor(projectId, baseRuleset.basedOnId);\n }\n\n // The specified `rulesetId` can't be the same as the base ruleset's ID.\n // slither-disable-next-line incorrect-equality\n if (baseRuleset.id == rulesetId) {\n revert BLOCK_ALREADY_CONTAINS_RULESET();\n }\n\n // The time when the duration of the base ruleset's approval hook has finished.\n // If the provided ruleset has no approval hook, return the current timestamp.\n uint256 timestampAfterApprovalHook = baseRuleset.approvalHook == IJBRulesetApprovalHook(address(0))\n ? 0\n : rulesetId + baseRuleset.approvalHook.DURATION();\n\n _initializeRulesetFor({\n projectId: projectId,\n baseRuleset: baseRuleset,\n rulesetId: rulesetId,\n // Can only start after the approval hook.\n mustStartAtOrAfter: timestampAfterApprovalHook > mustStartAtOrAfter\n ? timestampAfterApprovalHook\n : mustStartAtOrAfter,\n weight: weight\n });\n }\n\n /// @notice Initializes a ruleset with the specified properties.\n /// @param projectId The ID of the project to initialize the ruleset for.\n /// @param baseRuleset The ruleset struct to base the newly initialized one on.\n /// @param rulesetId The `rulesetId` for the ruleset being initialized.\n /// @param mustStartAtOrAfter The earliest time the ruleset can start. The ruleset cannot start before this\n /// timestamp.\n /// @param weight The weight to give the newly initialized ruleset.\n function _initializeRulesetFor(\n uint256 projectId,\n JBRuleset memory baseRuleset,\n uint256 rulesetId,\n uint256 mustStartAtOrAfter,\n uint256 weight\n )\n internal\n {\n // If there is no base, initialize a first ruleset.\n if (baseRuleset.cycleNumber == 0) {\n // Set fresh intrinsic properties.\n _packAndStoreIntrinsicPropertiesOf({\n rulesetId: rulesetId,\n projectId: projectId,\n rulesetCycleNumber: 1,\n weight: weight,\n basedOnId: baseRuleset.id,\n start: mustStartAtOrAfter\n });\n } else {\n // Derive the correct next start time from the base.\n uint256 start = _deriveStartFrom(baseRuleset, mustStartAtOrAfter);\n\n // A weight of 1 is treated as a weight of 0.\n // This is to allow a weight of 0 (default) to represent inheriting the decayed weight of the previous\n // ruleset.\n weight = weight > 0 ? (weight == 1 ? 0 : weight) : _deriveWeightFrom(projectId, baseRuleset, start);\n\n // Derive the correct ruleset cycle number.\n uint256 rulesetCycleNumber = _deriveCycleNumberFrom(baseRuleset, start);\n\n // Update the intrinsic properties.\n _packAndStoreIntrinsicPropertiesOf({\n rulesetId: rulesetId,\n projectId: projectId,\n rulesetCycleNumber: rulesetCycleNumber,\n weight: weight,\n basedOnId: baseRuleset.id,\n start: start\n });\n }\n\n // Set the project's latest ruleset configuration.\n latestRulesetIdOf[projectId] = rulesetId;\n\n emit RulesetInitialized(rulesetId, projectId, baseRuleset.id);\n }\n\n /// @notice Efficiently stores the provided intrinsic properties of a ruleset.\n /// @param rulesetId The `rulesetId` of the ruleset to pack and store for.\n /// @param projectId The ID of the project the ruleset belongs to.\n /// @param rulesetCycleNumber The cycle number of the ruleset.\n /// @param weight The weight of the ruleset.\n /// @param basedOnId The `rulesetId` of the ruleset this ruleset was based on.\n /// @param start The start time of this ruleset.\n function _packAndStoreIntrinsicPropertiesOf(\n uint256 rulesetId,\n uint256 projectId,\n uint256 rulesetCycleNumber,\n uint256 weight,\n uint256 basedOnId,\n uint256 start\n )\n internal\n {\n // `weight` in bits 0-87.\n uint256 packed = weight;\n\n // `basedOnId` in bits 88-143.\n packed |= basedOnId << 88;\n\n // `start` in bits 144-199.\n packed |= start << 144;\n\n // cycle number in bits 200-255.\n packed |= rulesetCycleNumber << 200;\n\n // Store the packed value.\n _packedIntrinsicPropertiesOf[projectId][rulesetId] = packed;\n }\n\n /// @notice The ruleset up next for a project, if one exists, whether or not that ruleset has been approved.\n /// @dev A value of 0 is returned if no ruleset was found.\n /// @dev Assumes the project has a `latestRulesetIdOf` value.\n /// @param projectId The ID of the project to check for an upcoming approvable ruleset.\n /// @return rulesetId The `rulesetId` of the upcoming approvable ruleset if one exists, or 0 if one doesn't exist.\n function _upcomingApprovableRulesetIdOf(uint256 projectId) internal view returns (uint256 rulesetId) {\n // Get a reference to the ID of the project's latest ruleset.\n rulesetId = latestRulesetIdOf[projectId];\n\n // Get the struct for the latest ruleset.\n JBRuleset memory ruleset = _getStructFor(projectId, rulesetId);\n\n // There is no upcoming ruleset if the latest ruleset has already started.\n if (block.timestamp >= ruleset.start) return 0;\n\n // If this is the first ruleset, it is queued.\n if (ruleset.cycleNumber == 1) return rulesetId;\n\n // Get a reference to the ID of the ruleset the latest ruleset was based on.\n uint256 basedOnId = ruleset.basedOnId;\n\n // Get the necessary properties for the base ruleset.\n JBRuleset memory baseRuleset;\n\n // Find the base ruleset that is not still queued.\n while (true) {\n baseRuleset = _getStructFor(projectId, basedOnId);\n\n // If the base ruleset starts in the future,\n if (block.timestamp < baseRuleset.start) {\n // Set the `rulesetId` to the one found.\n rulesetId = baseRuleset.id;\n // Check the ruleset it was based on in the next iteration.\n basedOnId = baseRuleset.basedOnId;\n } else {\n // Break out of the loop when a base ruleset which has already started is found.\n break;\n }\n }\n\n // Get the ruleset struct for the ID found.\n ruleset = _getStructFor(projectId, rulesetId);\n\n // If the latest ruleset doesn't start until after another base ruleset return 0.\n if (baseRuleset.duration != 0 && block.timestamp < ruleset.start - baseRuleset.duration) {\n return 0;\n }\n }\n\n /// @notice The ID of the ruleset which has started and hasn't expired yet, whether or not it has been approved, for\n /// a given project. If approved, this is the active ruleset.\n /// @dev A value of 0 is returned if no ruleset was found.\n /// @dev Assumes the project has a latest ruleset.\n /// @param projectId The ID of the project to check for a currently approvable ruleset.\n /// @return The ID of a currently approvable ruleset if one exists, or 0 if one doesn't exist.\n function _currentlyApprovableRulesetIdOf(uint256 projectId) internal view returns (uint256) {\n // Get a reference to the project's latest ruleset.\n uint256 rulesetId = latestRulesetIdOf[projectId];\n\n // Get the struct for the latest ruleset.\n JBRuleset memory ruleset = _getStructFor(projectId, rulesetId);\n\n // Loop through all most recently queued rulesets until an approvable one is found, or we've proven one can't\n // exist.\n do {\n // If the latest ruleset is expired, return an empty ruleset.\n // A ruleset with a duration of 0 cannot expire.\n if (ruleset.duration != 0 && block.timestamp >= ruleset.start + ruleset.duration) {\n return 0;\n }\n\n // Return the ruleset's `rulesetId` if it has started.\n if (block.timestamp >= ruleset.start) {\n return ruleset.id;\n }\n\n ruleset = _getStructFor(projectId, ruleset.basedOnId);\n } while (ruleset.cycleNumber != 0);\n\n return 0;\n }\n\n /// @notice A simulated view of the ruleset that would be created if the provided one cycled over (if the project\n /// doesn't queue a new ruleset).\n /// @dev Returns an empty ruleset if a ruleset can't be simulated based on the provided one.\n /// @dev Assumes a simulated ruleset will never be based on a ruleset with a duration of 0.\n /// @param projectId The ID of the project of the ruleset.\n /// @param baseRuleset The ruleset that the simulated ruleset should be based on.\n /// @param allowMidRuleset A flag indicating if the simulated ruleset is allowed to already be mid ruleset.\n /// @return A simulated ruleset struct: the next ruleset by default. This will be overwritten if a new ruleset is\n /// queued for the project.\n function _simulateCycledRulesetBasedOn(\n uint256 projectId,\n JBRuleset memory baseRuleset,\n bool allowMidRuleset\n )\n internal\n view\n returns (JBRuleset memory)\n {\n // Get the distance from the current time to the start of the next possible ruleset.\n // If the simulated ruleset must not yet have started, the start time of the simulated ruleset must be in the\n // future.\n uint256 mustStartAtOrAfter = !allowMidRuleset ? block.timestamp + 1 : block.timestamp - baseRuleset.duration + 1;\n\n // Calculate what the start time should be.\n uint256 start = _deriveStartFrom(baseRuleset, mustStartAtOrAfter);\n\n // Calculate what the cycle number should be.\n uint256 rulesetCycleNumber = _deriveCycleNumberFrom(baseRuleset, start);\n\n return JBRuleset({\n cycleNumber: rulesetCycleNumber,\n id: baseRuleset.id,\n basedOnId: baseRuleset.basedOnId,\n start: start,\n duration: baseRuleset.duration,\n weight: _deriveWeightFrom(projectId, baseRuleset, start),\n decayRate: baseRuleset.decayRate,\n approvalHook: baseRuleset.approvalHook,\n metadata: baseRuleset.metadata\n });\n }\n\n /// @notice The date that is the nearest multiple of the base ruleset's duration from the start of the next cycle.\n /// @param baseRuleset The ruleset to base the calculation on (the previous ruleset).\n /// @param mustStartAtOrAfter The earliest time the next ruleset can start. The ruleset cannot start before this\n /// timestamp.\n /// @return start The next start time.\n function _deriveStartFrom(\n JBRuleset memory baseRuleset,\n uint256 mustStartAtOrAfter\n )\n internal\n pure\n returns (uint256 start)\n {\n // A subsequent ruleset to one with a duration of 0 should start as soon as possible.\n if (baseRuleset.duration == 0) return mustStartAtOrAfter;\n\n // The time when the ruleset immediately after the specified ruleset starts.\n uint256 nextImmediateStart = baseRuleset.start + baseRuleset.duration;\n\n // If the next immediate start is now or in the future, return it.\n if (nextImmediateStart >= mustStartAtOrAfter) {\n return nextImmediateStart;\n }\n\n // The amount of seconds since the `mustStartAtOrAfter` time which results in a start time that might satisfy\n // the specified limits.\n // slither-disable-next-line weak-prng\n uint256 timeFromImmediateStartMultiple = (mustStartAtOrAfter - nextImmediateStart) % baseRuleset.duration;\n\n // A reference to the first possible start timestamp.\n start = mustStartAtOrAfter - timeFromImmediateStartMultiple;\n\n // Add increments of duration as necessary to satisfy the threshold.\n while (mustStartAtOrAfter > start) {\n start = start + baseRuleset.duration;\n }\n }\n\n /// @notice The accumulated weight change since the specified ruleset.\n /// @param projectId The ID of the project to which the ruleset weights apply.\n /// @param baseRuleset The ruleset to base the calculation on (the previous ruleset).\n /// @param start The start time of the ruleset to derive a weight for.\n /// @return weight The derived weight, as a fixed point number with 18 decimals.\n function _deriveWeightFrom(\n uint256 projectId,\n JBRuleset memory baseRuleset,\n uint256 start\n )\n internal\n view\n returns (uint256 weight)\n {\n // A subsequent ruleset to one with a duration of 0 should have the next possible weight.\n if (baseRuleset.duration == 0) {\n return mulDiv(\n baseRuleset.weight, JBConstants.MAX_DECAY_RATE - baseRuleset.decayRate, JBConstants.MAX_DECAY_RATE\n );\n }\n\n // The weight should be based off the base ruleset's weight.\n weight = baseRuleset.weight;\n\n // If the decay is 0, the weight doesn't change.\n if (baseRuleset.decayRate == 0) return weight;\n\n // The difference between the start of the base ruleset and the proposed start.\n uint256 startDistance = start - baseRuleset.start;\n\n // Apply the base ruleset's decay rate for each ruleset that has passed.\n uint256 decayMultiple;\n unchecked {\n decayMultiple = startDistance / baseRuleset.duration; // Non-null duration is excluded above\n }\n\n // Check the cache if needed.\n if (decayMultiple > _DECAY_MULTIPLE_CACHE_LOOKUP_THRESHOLD) {\n // Get a cached weight for the rulesetId.\n JBRulesetWeightCache memory cache = _weightCacheOf[projectId][baseRuleset.id];\n\n // If a cached value is available, use it.\n if (cache.decayMultiple > 0) {\n // Set the starting weight to be the cached value.\n weight = cache.weight;\n\n // Set the decay multiple to be the difference between the cached value and the total decay multiple\n // that should be applied.\n decayMultiple -= cache.decayMultiple;\n }\n }\n\n for (uint256 i; i < decayMultiple; i++) {\n // The number of times to apply the decay rate.\n // Base the new weight on the specified ruleset's weight.\n weight = mulDiv(weight, JBConstants.MAX_DECAY_RATE - baseRuleset.decayRate, JBConstants.MAX_DECAY_RATE);\n\n // The calculation doesn't need to continue if the weight is 0.\n if (weight == 0) break;\n }\n }\n\n /// @notice The cycle number of the next ruleset given the specified ruleset.\n /// @dev Each time a ruleset starts, whether it was queued or cycled over, the cycle number is incremented by 1.\n /// @param baseRuleset The previously queued ruleset, to base the calculation on.\n /// @param start The start time of the ruleset to derive a cycle number for.\n /// @return The ruleset's cycle number.\n function _deriveCycleNumberFrom(JBRuleset memory baseRuleset, uint256 start) internal pure returns (uint256) {\n // A subsequent ruleset to one with a duration of 0 should be the next number.\n if (baseRuleset.duration == 0) {\n return baseRuleset.cycleNumber + 1;\n }\n\n // The difference between the start of the base ruleset and the proposed start.\n uint256 startDistance = start - baseRuleset.start;\n\n // Find the number of base rulesets that fit in the start distance.\n return baseRuleset.cycleNumber + (startDistance / baseRuleset.duration);\n }\n\n /// @notice The approval status of a given project and ruleset struct according to the relevant approval hook.\n /// @param projectId The ID of the project that the ruleset belongs to.\n /// @param ruleset The ruleset to get an approval flag for.\n /// @return The approval status of the project's ruleset.\n function _approvalStatusOf(uint256 projectId, JBRuleset memory ruleset) internal view returns (JBApprovalStatus) {\n return _approvalStatusOf({\n projectId: projectId,\n rulesetId: ruleset.id,\n start: ruleset.start,\n approvalHookRulesetId: ruleset.basedOnId\n });\n }\n\n /// @notice The approval status of a given ruleset (ID) for a given project (ID).\n /// @param projectId The ID of the project the ruleset belongs to.\n /// @param rulesetId The ID of the ruleset to get the approval status of.\n /// @param start The start time of the ruleset to get the approval status of.\n /// @param approvalHookRulesetId The ID of the ruleset with the approval hook that should be checked against.\n /// @return The approval status of the project.\n function _approvalStatusOf(\n uint256 projectId,\n uint256 rulesetId,\n uint256 start,\n uint256 approvalHookRulesetId\n )\n internal\n view\n returns (JBApprovalStatus)\n {\n // If there is no ruleset ID to check the approval hook of, the approval hook is empty.\n if (approvalHookRulesetId == 0) return JBApprovalStatus.Empty;\n\n // Get the struct of the ruleset with the approval hook.\n JBRuleset memory approvalHookRuleset = _getStructFor(projectId, approvalHookRulesetId);\n\n // If there is no approval hook, it's considered empty.\n if (approvalHookRuleset.approvalHook == IJBRulesetApprovalHook(address(0))) {\n return JBApprovalStatus.Empty;\n }\n\n // Return the approval hook's approval status.\n return approvalHookRuleset.approvalHook.approvalStatusOf(projectId, rulesetId, start);\n }\n\n /// @notice Unpack a ruleset's packed stored values into an easy-to-work-with ruleset struct.\n /// @param projectId The ID of the project the ruleset belongs to.\n /// @param rulesetId The ID of the ruleset to get the full struct for.\n /// @return ruleset A ruleset struct.\n function _getStructFor(uint256 projectId, uint256 rulesetId) internal view returns (JBRuleset memory ruleset) {\n // Return an empty ruleset if the specified `rulesetId` is 0.\n // slither-disable-next-line incorrect-equality\n if (rulesetId == 0) return ruleset;\n\n ruleset.id = rulesetId;\n\n uint256 packedIntrinsicProperties = _packedIntrinsicPropertiesOf[projectId][rulesetId];\n\n // `weight` in bits 0-87 bits.\n ruleset.weight = uint256(uint88(packedIntrinsicProperties));\n // `basedOnId` in bits 88-143 bits.\n ruleset.basedOnId = uint256(uint56(packedIntrinsicProperties >> 88));\n // `start` in bits 144-199 bits.\n ruleset.start = uint256(uint56(packedIntrinsicProperties >> 144));\n // `cycleNumber` in bits 200-255 bits.\n ruleset.cycleNumber = uint256(uint56(packedIntrinsicProperties >> 200));\n\n uint256 packedUserProperties = _packedUserPropertiesOf[projectId][rulesetId];\n\n // approval hook in bits 0-159 bits.\n ruleset.approvalHook = IJBRulesetApprovalHook(address(uint160(packedUserProperties)));\n // `duration` in bits 160-191 bits.\n ruleset.duration = uint256(uint32(packedUserProperties >> 160));\n // decay rate in bits 192-223 bits.\n ruleset.decayRate = uint256(uint32(packedUserProperties >> 192));\n\n ruleset.metadata = _metadataOf[projectId][rulesetId];\n }\n}\n" + }, + "src/enums/JBApprovalStatus.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @notice A ruleset's approval status in a ruleset approval hook.\nenum JBApprovalStatus {\n Empty,\n Upcoming,\n Active,\n ApprovalExpected,\n Approved,\n Failed\n}\n" + }, + "src/interfaces/IJBRulesetApprovalHook.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {JBApprovalStatus} from \"./../enums/JBApprovalStatus.sol\";\n\ninterface IJBRulesetApprovalHook is IERC165 {\n function DURATION() external view returns (uint256);\n\n function approvalStatusOf(\n uint256 projectId,\n uint256 rulesetId,\n uint256 start\n )\n external\n view\n returns (JBApprovalStatus);\n}\n" + }, + "src/interfaces/IJBRulesets.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBApprovalStatus} from \"./../enums/JBApprovalStatus.sol\";\nimport {JBRuleset} from \"./../structs/JBRuleset.sol\";\nimport {IJBControlled} from \"./IJBControlled.sol\";\nimport {IJBRulesetApprovalHook} from \"./IJBRulesetApprovalHook.sol\";\n\ninterface IJBRulesets is IJBControlled {\n event RulesetQueued(\n uint256 indexed rulesetId,\n uint256 indexed projectId,\n uint256 duration,\n uint256 weight,\n uint256 decayRate,\n IJBRulesetApprovalHook hook,\n uint256 metadata,\n uint256 mustStartAtOrAfter,\n address caller\n );\n\n event RulesetInitialized(uint256 indexed rulesetId, uint256 indexed projectId, uint256 indexed basedOnId);\n\n function latestRulesetIdOf(uint256 projectId) external view returns (uint256);\n\n function getRulesetOf(uint256 projectId, uint256 rulesetId) external view returns (JBRuleset memory);\n\n function latestQueuedRulesetOf(uint256 projectId)\n external\n view\n returns (JBRuleset memory ruleset, JBApprovalStatus approvalStatus);\n\n function rulesetsOf(\n uint256 projectId,\n uint256 startingId,\n uint256 size\n )\n external\n view\n returns (JBRuleset[] memory rulesets);\n\n function upcomingRulesetOf(uint256 projectId) external view returns (JBRuleset memory ruleset);\n\n function currentOf(uint256 projectId) external view returns (JBRuleset memory ruleset);\n\n function currentApprovalStatusForLatestRulesetOf(uint256 projectId) external view returns (JBApprovalStatus);\n\n function queueFor(\n uint256 projectId,\n uint256 duration,\n uint256 weight,\n uint256 decayRate,\n IJBRulesetApprovalHook approvalHook,\n uint256 metadata,\n uint256 mustStartAtOrAfter\n )\n external\n returns (JBRuleset memory ruleset);\n\n function updateRulesetWeightCache(uint256 projectId) external;\n}\n" + }, + "src/structs/JBRuleset.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBRulesetApprovalHook} from \"./../interfaces/IJBRulesetApprovalHook.sol\";\n\n/// @dev `JBRuleset` timestamps are unix timestamps (seconds since 00:00 January 1st, 1970 UTC).\n/// @custom:member cycleNumber The ruleset's cycle number. Each ruleset's `cycleNumber` is the previous ruleset's\n/// `cycleNumber` plus one. Each project's first ruleset has a `cycleNumber` of 1.\n/// @custom:member id The ruleset's ID, which is a timestamp of when this ruleset's rules were initialized. The\n/// `rulesetId` stays the same for rulesets that automatically cycle over from a manually queued ruleset.\n/// @custom:member basedOnId The `rulesetId` of the ruleset which was active when this ruleset was created.\n/// @custom:member start The timestamp from which this ruleset is considered active.\n/// @custom:member duration The number of seconds the ruleset lasts for. After this duration, a new ruleset will start.\n/// The project owner can queue new rulesets at any time, which will take effect once the current ruleset's duration is\n/// over. If the `duration` is 0, newly queued rulesets will take effect immediately. If a ruleset ends and there are no\n/// new rulesets queued, the current ruleset cycles over to another one with the same properties but a new `start`\n/// timestamp and a `weight` reduced by the ruleset's `decayRate`.\n/// @custom:member weight A fixed point number with 18 decimals which is typically used by payment terminals to\n/// determine how many tokens should be minted when a payment is received. This can be used by other contracts for\n/// arbitrary calculations.\n/// @custom:member decayRate The percentage by which to reduce the `weight` each time a new ruleset starts. `weight` is\n/// a percentage out of `JBConstants.MAX_DECAY_RATE`. If it's 0, the next ruleset will have the same `weight` by\n/// default. If it's 90%, the next ruleset's `weight` will be 10% smaller. If a ruleset explicitly sets a new `weight`,\n/// the `decayRate` doesn't apply.\n/// @custom:member approvalHook An address of a contract that says whether a queued ruleset should be approved or\n/// rejected. If a\n/// ruleset is rejected, it won't go into effect. An approval hook can be used to create rules which dictate how a\n/// project owner can change their ruleset over time.\n/// @custom:member metadata Extra data associated with a ruleset which can be used by other contracts.\nstruct JBRuleset {\n uint256 cycleNumber;\n uint256 id;\n uint256 basedOnId;\n uint256 start;\n uint256 duration;\n uint256 weight;\n uint256 decayRate;\n IJBRulesetApprovalHook approvalHook;\n uint256 metadata;\n}\n" + }, + "src/structs/JBRulesetWeightCache.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @custom:member weight The cached weight value.\n/// @custom:member decayMultiple The decay multiple that produces the given weight.\nstruct JBRulesetWeightCache {\n uint256 weight;\n uint256 decayMultiple;\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n mapping(address account => uint256) private _balances;\n\n mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n\n /**\n * @dev Sets the values for {name} and {symbol}.\n *\n * All two of these values are immutable: they can only be set once during\n * construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the default value returned by this function, unless\n * it's overridden.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return 18;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - the caller must have a balance of at least `value`.\n */\n function transfer(address to, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _transfer(owner, to, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n * `transferFrom`. This is semantically equivalent to an infinite approval.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _approve(owner, spender, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * NOTE: Does not update the allowance if the current allowance\n * is the maximum `uint256`.\n *\n * Requirements:\n *\n * - `from` and `to` cannot be the zero address.\n * - `from` must have a balance of at least `value`.\n * - the caller must have allowance for ``from``'s tokens of at least\n * `value`.\n */\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n address spender = _msgSender();\n _spendAllowance(from, spender, value);\n _transfer(from, to, value);\n return true;\n }\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to`.\n *\n * This internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _transfer(address from, address to, uint256 value) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n if (to == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(from, to, value);\n }\n\n /**\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n * this function.\n *\n * Emits a {Transfer} event.\n */\n function _update(address from, address to, uint256 value) internal virtual {\n if (from == address(0)) {\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\n _totalSupply += value;\n } else {\n uint256 fromBalance = _balances[from];\n if (fromBalance < value) {\n revert ERC20InsufficientBalance(from, fromBalance, value);\n }\n unchecked {\n // Overflow not possible: value <= fromBalance <= totalSupply.\n _balances[from] = fromBalance - value;\n }\n }\n\n if (to == address(0)) {\n unchecked {\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n _totalSupply -= value;\n }\n } else {\n unchecked {\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n _balances[to] += value;\n }\n }\n\n emit Transfer(from, to, value);\n }\n\n /**\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n * Relies on the `_update` mechanism\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _mint(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(address(0), account, value);\n }\n\n /**\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n * Relies on the `_update` mechanism.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead\n */\n function _burn(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n _update(account, address(0), value);\n }\n\n /**\n * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address owner, address spender, uint256 value) internal {\n _approve(owner, spender, value, true);\n }\n\n /**\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n *\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n * `Approval` event during `transferFrom` operations.\n *\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n * true using the following override:\n * ```\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n * super._approve(owner, spender, value, true);\n * }\n * ```\n *\n * Requirements are the same as {_approve}.\n */\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(address(0));\n }\n if (spender == address(0)) {\n revert ERC20InvalidSpender(address(0));\n }\n _allowances[owner][spender] = value;\n if (emitEvent) {\n emit Approval(owner, spender, value);\n }\n }\n\n /**\n * @dev Updates `owner` s allowance for `spender` based on spent `value`.\n *\n * Does not update the allowance value in case of infinite allowance.\n * Revert if not enough allowance is available.\n *\n * Does not emit an {Approval} event.\n */\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n uint256 currentAllowance = allowance(owner, spender);\n if (currentAllowance != type(uint256).max) {\n if (currentAllowance < value) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n }\n unchecked {\n _approve(owner, spender, currentAllowance - value, false);\n }\n }\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20Permit} from \"./IERC20Permit.sol\";\nimport {ERC20} from \"../ERC20.sol\";\nimport {ECDSA} from \"../../../utils/cryptography/ECDSA.sol\";\nimport {EIP712} from \"../../../utils/cryptography/EIP712.sol\";\nimport {Nonces} from \"../../../utils/Nonces.sol\";\n\n/**\n * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n */\nabstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces {\n bytes32 private constant PERMIT_TYPEHASH =\n keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n\n /**\n * @dev Permit deadline has expired.\n */\n error ERC2612ExpiredSignature(uint256 deadline);\n\n /**\n * @dev Mismatched signature.\n */\n error ERC2612InvalidSigner(address signer, address owner);\n\n /**\n * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`.\n *\n * It's a good idea to use the same `name` that is defined as the ERC20 token name.\n */\n constructor(string memory name) EIP712(name, \"1\") {}\n\n /**\n * @inheritdoc IERC20Permit\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) public virtual {\n if (block.timestamp > deadline) {\n revert ERC2612ExpiredSignature(deadline);\n }\n\n bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));\n\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signer = ECDSA.recover(hash, v, r, s);\n if (signer != owner) {\n revert ERC2612InvalidSigner(signer, owner);\n }\n\n _approve(owner, spender, value);\n }\n\n /**\n * @inheritdoc IERC20Permit\n */\n function nonces(address owner) public view virtual override(IERC20Permit, Nonces) returns (uint256) {\n return super.nonces(owner);\n }\n\n /**\n * @inheritdoc IERC20Permit\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view virtual returns (bytes32) {\n return _domainSeparatorV4();\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Votes.sol)\n\npragma solidity ^0.8.20;\n\nimport {ERC20} from \"../ERC20.sol\";\nimport {Votes} from \"../../../governance/utils/Votes.sol\";\nimport {Checkpoints} from \"../../../utils/structs/Checkpoints.sol\";\n\n/**\n * @dev Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,\n * and supports token supply up to 2^208^ - 1, while COMP is limited to 2^96^ - 1.\n *\n * NOTE: This contract does not provide interface compatibility with Compound's COMP token.\n *\n * This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either\n * by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting\n * power can be queried through the public accessors {getVotes} and {getPastVotes}.\n *\n * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it\n * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.\n */\nabstract contract ERC20Votes is ERC20, Votes {\n /**\n * @dev Total supply cap has been exceeded, introducing a risk of votes overflowing.\n */\n error ERC20ExceededSafeSupply(uint256 increasedSupply, uint256 cap);\n\n /**\n * @dev Maximum token supply. Defaults to `type(uint208).max` (2^208^ - 1).\n *\n * This maximum is enforced in {_update}. It limits the total supply of the token, which is otherwise a uint256,\n * so that checkpoints can be stored in the Trace208 structure used by {{Votes}}. Increasing this value will not\n * remove the underlying limitation, and will cause {_update} to fail because of a math overflow in\n * {_transferVotingUnits}. An override could be used to further restrict the total supply (to a lower value) if\n * additional logic requires it. When resolving override conflicts on this function, the minimum should be\n * returned.\n */\n function _maxSupply() internal view virtual returns (uint256) {\n return type(uint208).max;\n }\n\n /**\n * @dev Move voting power when tokens are transferred.\n *\n * Emits a {IVotes-DelegateVotesChanged} event.\n */\n function _update(address from, address to, uint256 value) internal virtual override {\n super._update(from, to, value);\n if (from == address(0)) {\n uint256 supply = totalSupply();\n uint256 cap = _maxSupply();\n if (supply > cap) {\n revert ERC20ExceededSafeSupply(supply, cap);\n }\n }\n _transferVotingUnits(from, to, value);\n }\n\n /**\n * @dev Returns the voting units of an `account`.\n *\n * WARNING: Overriding this function may compromise the internal vote accounting.\n * `ERC20Votes` assumes tokens map to voting units 1:1 and this is not easy to change.\n */\n function _getVotingUnits(address account) internal view virtual override returns (uint256) {\n return balanceOf(account);\n }\n\n /**\n * @dev Get number of checkpoints for `account`.\n */\n function numCheckpoints(address account) public view virtual returns (uint32) {\n return _numCheckpoints(account);\n }\n\n /**\n * @dev Get the `pos`-th checkpoint for `account`.\n */\n function checkpoints(address account, uint32 pos) public view virtual returns (Checkpoints.Checkpoint208 memory) {\n return _checkpoints(account, pos);\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n" + }, + "src/JBERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport {ERC20Votes, ERC20} from \"@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\";\nimport {ERC20Permit, Nonces} from \"@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol\";\nimport {IJBToken} from \"./interfaces/IJBToken.sol\";\n\n/// @notice An ERC-20 token that can be used by a project in the `JBTokens`.\ncontract JBERC20 is ERC20Votes, ERC20Permit, Ownable, IJBToken {\n //*********************************************************************//\n // -------------------------- public views --------------------------- //\n //*********************************************************************//\n\n /// @notice The number of decimals included in the fixed point accounting of this token.\n /// @return The number of decimals.\n function decimals() public view override(ERC20, IJBToken) returns (uint8) {\n return super.decimals();\n }\n\n /// @notice The total supply of this ERC20.\n /// @return The total supply of this ERC20, as a fixed point number.\n function totalSupply() public view override(ERC20, IJBToken) returns (uint256) {\n return super.totalSupply();\n }\n\n /// @notice An account's balance of this ERC20.\n /// @param account The account to get a balance of.\n /// @return The balance of the `account` of this ERC20, as a fixed point number with 18 decimals.\n function balanceOf(address account) public view override(ERC20, IJBToken) returns (uint256) {\n return super.balanceOf(account);\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param name The name of the token.\n /// @param symbol The symbol that the token should be represented by.\n /// @param owner The owner of the token.\n constructor(\n string memory name,\n string memory symbol,\n address owner\n )\n ERC20(name, symbol)\n ERC20Permit(name)\n Ownable(owner)\n {}\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Mints more of the token.\n /// @dev Only the owner of this contract cant mint more of it.\n /// @param account The account to mint the tokens for.\n /// @param amount The amount of tokens to mint, as a fixed point number with 18 decimals.\n function mint(address account, uint256 amount) external override onlyOwner {\n return _mint(account, amount);\n }\n\n /// @notice Burn some outstanding tokens.\n /// @dev Only the owner of this contract cant burn some of its supply.\n /// @param account The account to burn tokens from.\n /// @param amount The amount of tokens to burn, as a fixed point number with 18 decimals.\n function burn(address account, uint256 amount) external override onlyOwner {\n return _burn(account, amount);\n }\n\n /// @notice required override.\n function nonces(address owner) public view virtual override(ERC20Permit, Nonces) returns (uint256) {\n return super.nonces(owner);\n }\n\n //*********************************************************************//\n // ---------------------- internal transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice required override.\n function _update(address from, address to, uint256 value) internal virtual override(ERC20, ERC20Votes) {\n super._update(from, to, value);\n }\n}\n" + }, + "src/JBTokens.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {JBControlled} from \"./abstract/JBControlled.sol\";\nimport {IJBDirectory} from \"./interfaces/IJBDirectory.sol\";\nimport {IJBToken} from \"./interfaces/IJBToken.sol\";\nimport {IJBTokens} from \"./interfaces/IJBTokens.sol\";\nimport {JBERC20} from \"./JBERC20.sol\";\n\n/// @notice Manages minting, burning, and balances of projects' tokens and token credits.\n/// @dev Token balances can either be ERC-20s or token credits. This contract manages these two representations and\n/// allows credit -> ERC-20 claiming.\n/// @dev The total supply of a project's tokens and the balance of each account are calculated in this contract.\n/// @dev An ERC-20 contract must be set by a project's owner for ERC-20 claiming to become available. Projects can bring\n/// their own IJBToken if they prefer.\ncontract JBTokens is JBControlled, IJBTokens {\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n\n error TOKEN_ALREADY_SET();\n error EMPTY_NAME();\n error EMPTY_SYMBOL();\n error EMPTY_TOKEN();\n error INSUFFICIENT_FUNDS();\n error INSUFFICIENT_CREDITS();\n error PROJECT_ALREADY_HAS_TOKEN();\n error RECIPIENT_ZERO_ADDRESS();\n error TOKEN_NOT_FOUND();\n error TOKENS_MUST_HAVE_18_DECIMALS();\n error OVERFLOW_ALERT();\n\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice Each project's attached token contract.\n /// @custom:param projectId The ID of the project the token belongs to.\n mapping(uint256 projectId => IJBToken) public override tokenOf;\n\n /// @notice Each token's project.\n /// @custom:param token The address of the token associated with the project.\n mapping(IJBToken token => uint256) public override projectIdOf;\n\n /// @notice The total supply of credits for each project.\n /// @custom:param projectId The ID of the project to which the credits belong.\n mapping(uint256 projectId => uint256) public override totalCreditSupplyOf;\n\n /// @notice Each holder's credit balance for each project.\n /// @custom:param holder The credit holder.\n /// @custom:param projectId The ID of the project to which the credits belong.\n mapping(address holder => mapping(uint256 projectId => uint256)) public override creditBalanceOf;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice The total balance a holder has for a specified project, including both tokens and token credits.\n /// @param holder The holder to get a balance for.\n /// @param projectId The project to get the `_holder`s balance for.\n /// @return balance The combined token and token credit balance of the `_holder\n function totalBalanceOf(address holder, uint256 projectId) external view override returns (uint256 balance) {\n // Get a reference to the holder's credits for the project.\n balance = creditBalanceOf[holder][projectId];\n\n // Get a reference to the project's current token.\n IJBToken token = tokenOf[projectId];\n\n // If the project has a current token, add the holder's balance to the total.\n if (token != IJBToken(address(0))) {\n balance = balance + token.balanceOf(holder);\n }\n }\n\n //*********************************************************************//\n // --------------------------- public views -------------------------- //\n //*********************************************************************//\n\n /// @notice The total supply for a specific project, including both tokens and token credits.\n /// @param projectId The ID of the project to get the total supply of.\n /// @return totalSupply The total supply of the project's tokens and token credits.\n function totalSupplyOf(uint256 projectId) public view override returns (uint256 totalSupply) {\n // Get a reference to the total supply of the project's credits\n totalSupply = totalCreditSupplyOf[projectId];\n\n // Get a reference to the project's current token.\n IJBToken token = tokenOf[projectId];\n\n // If the project has a current token, add its total supply to the total.\n if (token != IJBToken(address(0))) {\n totalSupply = totalSupply + token.totalSupply();\n }\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param directory A contract storing directories of terminals and controllers for each project.\n constructor(IJBDirectory directory) JBControlled(directory) {}\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Deploys an ERC-20 token for a project. It will be used when claiming tokens.\n /// @dev Deploys a project's ERC-20 token contract.\n /// @dev Only a project's controller can deploy its token.\n /// @param projectId The ID of the project to deploy an ERC-20 token for.\n /// @param name The ERC-20's name.\n /// @param symbol The ERC-20's symbol.\n /// @return token The address of the token that was deployed.\n function deployERC20For(\n uint256 projectId,\n string calldata name,\n string calldata symbol,\n bytes32 salt\n )\n external\n override\n onlyControllerOf(projectId)\n returns (IJBToken token)\n {\n // There must be a name.\n if (bytes(name).length == 0) revert EMPTY_NAME();\n\n // There must be a symbol.\n if (bytes(symbol).length == 0) revert EMPTY_SYMBOL();\n\n // The project shouldn't already have a token.\n if (tokenOf[projectId] != IJBToken(address(0))) revert PROJECT_ALREADY_HAS_TOKEN();\n\n token = salt == bytes32(0)\n ? new JBERC20(name, symbol, address(this))\n : new JBERC20{salt: salt}(name, symbol, address(this));\n\n // Store the token contract.\n tokenOf[projectId] = token;\n\n // Store the project for the token.\n projectIdOf[token] = projectId;\n\n emit DeployERC20(projectId, token, name, symbol, salt, msg.sender);\n }\n\n /// @notice Set a project's token if not already set.\n /// @dev Only a project's controller can set its token.\n /// @param projectId The ID of the project to set the token of.\n /// @param token The new token's address.\n function setTokenFor(uint256 projectId, IJBToken token) external override onlyControllerOf(projectId) {\n // Can't set to the zero address.\n if (token == IJBToken(address(0))) revert EMPTY_TOKEN();\n\n // Can't set a token if the project is already associated with another token.\n if (tokenOf[projectId] != IJBToken(address(0))) revert TOKEN_ALREADY_SET();\n\n // Can't set a token if it's already associated with another project.\n if (projectIdOf[token] != 0) revert TOKEN_ALREADY_SET();\n\n // Can't change to a token that doesn't use 18 decimals.\n if (token.decimals() != 18) revert TOKENS_MUST_HAVE_18_DECIMALS();\n\n // Store the new token.\n tokenOf[projectId] = token;\n\n // Store the project for the token.\n projectIdOf[token] = projectId;\n\n emit SetToken(projectId, token, msg.sender);\n }\n\n /// @notice Mint (create) new tokens or credits.\n /// @dev Only a project's current controller can mint its tokens.\n /// @param holder The address receiving the new tokens.\n /// @param projectId The ID of the project to which the tokens belong.\n /// @param amount The amount of tokens to mint.\n function mintFor(address holder, uint256 projectId, uint256 amount) external override onlyControllerOf(projectId) {\n // Get a reference to the project's current token.\n IJBToken token = tokenOf[projectId];\n\n // Save a reference to whether there a token exists.\n bool shouldClaimTokens = token != IJBToken(address(0));\n\n if (shouldClaimTokens) {\n // If tokens should be claimed, mint tokens into the holder's wallet.\n token.mint(holder, amount);\n } else {\n // Otherwise, add the tokens to their credits and the credit supply.\n creditBalanceOf[holder][projectId] = creditBalanceOf[holder][projectId] + amount;\n totalCreditSupplyOf[projectId] = totalCreditSupplyOf[projectId] + amount;\n }\n\n // The total supply can't exceed the maximum value storable in a uint208.\n if (totalSupplyOf(projectId) > type(uint208).max) revert OVERFLOW_ALERT();\n\n emit Mint(holder, projectId, amount, shouldClaimTokens, msg.sender);\n }\n\n /// @notice Burns (destroys) credits or tokens.\n /// @dev Credits are burned first, then tokens are burned.\n /// @dev Only a project's current controller can burn its tokens.\n /// @param holder The address that owns the tokens which are being burned.\n /// @param projectId The ID of the project to the burned tokens belong to.\n /// @param amount The amount of tokens to burn.\n function burnFrom(\n address holder,\n uint256 projectId,\n uint256 amount\n )\n external\n override\n onlyControllerOf(projectId)\n {\n // Get a reference to the project's current token.\n IJBToken token = tokenOf[projectId];\n\n // Get a reference to the amount of credits the holder has.\n uint256 creditBalance = creditBalanceOf[holder][projectId];\n\n // Get a reference to the amount of the project's current token the holder has in their wallet.\n uint256 tokenBalance = token == IJBToken(address(0)) ? 0 : token.balanceOf(holder);\n\n // There must be enough tokens to burn across the holder's combined token and credit balance.\n if (amount > tokenBalance + creditBalance) revert INSUFFICIENT_FUNDS();\n\n // The amount of tokens to burn.\n uint256 tokensToBurn;\n\n // Get a reference to how many tokens should be burned\n if (tokenBalance != 0) {\n // Burn credits before tokens.\n unchecked {\n tokensToBurn = creditBalance < amount ? amount - creditBalance : 0;\n }\n }\n\n // The amount of credits to burn.\n uint256 creditsToBurn;\n unchecked {\n creditsToBurn = amount - tokensToBurn;\n }\n\n // Subtract the burned credits from the credit balance and credit supply.\n if (creditsToBurn > 0) {\n creditBalanceOf[holder][projectId] = creditBalanceOf[holder][projectId] - creditsToBurn;\n totalCreditSupplyOf[projectId] = totalCreditSupplyOf[projectId] - creditsToBurn;\n }\n\n // Burn the tokens.\n if (tokensToBurn > 0) token.burn(holder, tokensToBurn);\n\n emit Burn(holder, projectId, amount, creditBalance, tokenBalance, msg.sender);\n }\n\n /// @notice Redeem credits to claim tokens into a holder's wallet.\n /// @dev Only a project's controller can claim that project's tokens.\n /// @param holder The owner of the credits being redeemed.\n /// @param projectId The ID of the project whose tokens are being claimed.\n /// @param amount The amount of tokens to claim.\n /// @param beneficiary The account into which the claimed tokens will go.\n function claimTokensFor(\n address holder,\n uint256 projectId,\n uint256 amount,\n address beneficiary\n )\n external\n override\n onlyControllerOf(projectId)\n {\n // Get a reference to the project's current token.\n IJBToken token = tokenOf[projectId];\n\n // The project must have a token contract attached.\n if (token == IJBToken(address(0))) revert TOKEN_NOT_FOUND();\n\n // Get a reference to the amount of credits the holder has.\n uint256 creditBalance = creditBalanceOf[holder][projectId];\n\n // There must be enough credits to claim.\n if (creditBalance < amount) revert INSUFFICIENT_CREDITS();\n\n unchecked {\n // Subtract the claim amount from the holder's credit balance.\n creditBalanceOf[holder][projectId] = creditBalance - amount;\n\n // Subtract the claim amount from the project's total credit supply.\n totalCreditSupplyOf[projectId] = totalCreditSupplyOf[projectId] - amount;\n }\n\n // Mint the equivalent amount of the project's token for the holder.\n token.mint(beneficiary, amount);\n\n emit ClaimTokens(holder, projectId, creditBalance, amount, beneficiary, msg.sender);\n }\n\n /// @notice Allows a holder to transfer credits to another account.\n /// @dev Only a project's controller can transfer credits for that project.\n /// @param holder The address to transfer credits from.\n /// @param projectId The ID of the project whose credits are being transferred.\n /// @param recipient The recipient of the credits.\n /// @param amount The amount of credits to transfer.\n function transferCreditsFrom(\n address holder,\n uint256 projectId,\n address recipient,\n uint256 amount\n )\n external\n override\n onlyControllerOf(projectId)\n {\n // Can't transfer to the zero address.\n if (recipient == address(0)) revert RECIPIENT_ZERO_ADDRESS();\n\n // Get a reference to the holder's unclaimed project token balance.\n uint256 creditBalance = creditBalanceOf[holder][projectId];\n\n // The holder must have enough unclaimed tokens to transfer.\n if (amount > creditBalance) revert INSUFFICIENT_CREDITS();\n\n // Subtract from the holder's unclaimed token balance.\n unchecked {\n creditBalanceOf[holder][projectId] = creditBalance - amount;\n }\n\n // Add the unclaimed project tokens to the recipient's balance.\n creditBalanceOf[recipient][projectId] = creditBalanceOf[recipient][projectId] + amount;\n\n emit TransferCredits(holder, projectId, recipient, amount, msg.sender);\n }\n}\n" + }, + "src/interfaces/IJBToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IJBToken {\n function decimals() external view returns (uint8);\n\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address account) external view returns (uint256);\n\n function mint(address account, uint256 amount) external;\n\n function burn(address account, uint256 amount) external;\n}\n" + }, + "src/interfaces/IJBTokens.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBToken} from \"./IJBToken.sol\";\nimport {IJBControlled} from \"./IJBControlled.sol\";\n\ninterface IJBTokens is IJBControlled {\n event DeployERC20(\n uint256 indexed projectId, IJBToken indexed token, string name, string symbol, bytes32 salt, address caller\n );\n\n event Mint(\n address indexed holder, uint256 indexed projectId, uint256 amount, bool tokensWereClaimed, address caller\n );\n\n event Burn(\n address indexed holder,\n uint256 indexed projectId,\n uint256 amount,\n uint256 initialCreditBalance,\n uint256 initialTokenBalance,\n address caller\n );\n\n event ClaimTokens(\n address indexed holder,\n uint256 indexed projectId,\n uint256 initialCreditBalance,\n uint256 amount,\n address beneficiary,\n address caller\n );\n\n event SetToken(uint256 indexed projectId, IJBToken indexed newToken, address caller);\n\n event TransferCredits(\n address indexed holder, uint256 indexed projectId, address indexed recipient, uint256 amount, address caller\n );\n\n function tokenOf(uint256 projectId) external view returns (IJBToken);\n\n function projectIdOf(IJBToken token) external view returns (uint256);\n\n function creditBalanceOf(address holder, uint256 projectId) external view returns (uint256);\n\n function totalCreditSupplyOf(uint256 projectId) external view returns (uint256);\n\n function totalSupplyOf(uint256 projectId) external view returns (uint256);\n\n function totalBalanceOf(address holder, uint256 projectId) external view returns (uint256 result);\n\n function deployERC20For(\n uint256 projectId,\n string calldata name,\n string calldata symbol,\n bytes32 salt\n )\n external\n returns (IJBToken token);\n\n function setTokenFor(uint256 projectId, IJBToken token) external;\n\n function burnFrom(address holder, uint256 projectId, uint256 amount) external;\n\n function mintFor(address holder, uint256 projectId, uint256 amount) external;\n\n function claimTokensFor(address holder, uint256 projectId, uint256 amount, address beneficiary) external;\n\n function transferCreditsFrom(address holder, uint256 projectId, address recipient, uint256 amount) external;\n}\n" + }, + "src/JBFundAccessLimits.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {ERC165} from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport {JBControlled} from \"./abstract/JBControlled.sol\";\nimport {IJBFundAccessLimits} from \"./interfaces/IJBFundAccessLimits.sol\";\nimport {IJBDirectory} from \"./interfaces/IJBDirectory.sol\";\nimport {JBFundAccessLimitGroup} from \"./structs/JBFundAccessLimitGroup.sol\";\nimport {JBCurrencyAmount} from \"./structs/JBCurrencyAmount.sol\";\n\n/// @notice Stores and manages terminal fund access limits for each project.\n/// @dev See the `JBFundAccessLimitGroup` struct to learn about payout limits and surplus allowances.\ncontract JBFundAccessLimits is JBControlled, ERC165, IJBFundAccessLimits {\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n\n error INVALID_PAYOUT_LIMIT();\n error INVALID_PAYOUT_LIMIT_CURRENCY();\n error INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING();\n error INVALID_SURPLUS_ALLOWANCE();\n error INVALID_SURPLUS_ALLOWANCE_CURRENCY();\n error INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING();\n\n //*********************************************************************//\n // --------------------- internal stored properties ------------------ //\n //*********************************************************************//\n\n /// @notice An array of packed payout limits for a given project, ruleset, terminal, and token.\n /// @dev bits 0-223: The maximum amount (in a specific currency) of the terminal's `token`s that the project can pay\n /// out during the applicable ruleset.\n /// @dev bits 224-255: The currency that the payout limit is denominated in. If this currency is different from the\n /// terminal's `token`, the payout limit will vary depending on their exchange rate.\n /// @custom:param projectId The ID of the project to get the packed payout limit data of.\n /// @custom:param rulesetId The ID of the ruleset that the packed payout limit data applies to.\n /// @custom:param terminal The terminal the payouts are being limited in.\n /// @custom:param token The token payouts are being limited for.\n mapping(\n uint256 projectId\n => mapping(uint256 rulesetId => mapping(address terminal => mapping(address token => uint256[])))\n ) internal _packedPayoutLimitsDataOf;\n\n /// @notice An array of packed surplus allowances for a given project, ruleset, terminal, and token.\n /// @dev bits 0-223: The maximum amount (in a specific currency) of the terminal's `token`s that the project can\n /// access from its surplus during the applicable ruleset.\n /// @dev bits 224-255: The currency that the surplus allowance is denominated in. If this currency is different from\n /// the terminal's `token`, the surplus allowance will vary depending on their exchange rate.\n /// @custom:param projectId The ID of the project to get the packed surplus allowance data of.\n /// @custom:param rulesetId The ID of the ruleset that the packed surplus allowance data applies to.\n /// @custom:param terminal The terminal the surplus allowance comes from.\n /// @custom:param token The token that the surplus allowance applies to.\n mapping(\n uint256 projectId\n => mapping(uint256 rulesetId => mapping(address terminal => mapping(address token => uint256[])))\n ) internal _packedSurplusAllowancesDataOf;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice A project's payout limits for a given ruleset, terminal, and token.\n /// @notice The total value of `token`s that a project can pay out from the terminal during the ruleset is dictated\n /// by a list of payout limits. Each payout limit is in terms of its own amount and currency.\n /// @dev The fixed point `amount`s of the returned structs will have the same number of decimals as the specified\n /// terminal.\n /// @param projectId The ID of the project to get the payout limits of.\n /// @param rulesetId The ID of the ruleset the payout limits apply to.\n /// @param terminal The terminal the payout limits apply to.\n /// @param token The token the payout limits apply to.\n /// @return payoutLimits The payout limits.\n function payoutLimitsOf(\n uint256 projectId,\n uint256 rulesetId,\n address terminal,\n address token\n )\n external\n view\n override\n returns (JBCurrencyAmount[] memory payoutLimits)\n {\n // Get a reference to the packed data.\n uint256[] memory packedPayoutLimitsData = _packedPayoutLimitsDataOf[projectId][rulesetId][terminal][token];\n\n // Get a reference to the number of payout limits.\n uint256 numberOfData = packedPayoutLimitsData.length;\n\n // Initialize the return value.\n payoutLimits = new JBCurrencyAmount[](numberOfData);\n\n // Keep a reference to the data that'll be iterated.\n uint256 packedPayoutLimitData;\n\n // Iterate through the stored packed values and format the returned value.\n for (uint256 i; i < numberOfData; i++) {\n // Set the data being iterated on.\n packedPayoutLimitData = packedPayoutLimitsData[i];\n\n // The limit amount is in bits 0-231. The currency is in bits 224-255.\n payoutLimits[i] = JBCurrencyAmount({\n currency: packedPayoutLimitData >> 224,\n amount: uint256(uint224(packedPayoutLimitData))\n });\n }\n }\n\n /// @notice A project's payout limit for a specific currency and a given ruleset, terminal, and token.\n /// @dev The fixed point amount returned will have the same number of decimals as the specified terminal.\n /// @param projectId The ID of the project to get the payout limit of.\n /// @param rulesetId The ID of the ruleset the payout limit applies to.\n /// @param terminal The terminal the payout limit applies to.\n /// @param token The token the payout limit applies to.\n /// @param currency The currency the payout limit is denominated in.\n /// @return payoutLimit The payout limit, as a fixed point number with the same number of decimals as the provided\n /// terminal.\n function payoutLimitOf(\n uint256 projectId,\n uint256 rulesetId,\n address terminal,\n address token,\n uint256 currency\n )\n external\n view\n override\n returns (uint256 payoutLimit)\n {\n // Get a reference to the packed data.\n uint256[] memory data = _packedPayoutLimitsDataOf[projectId][rulesetId][terminal][token];\n\n // Get a reference to the number of payout limits.\n uint256 numberOfData = data.length;\n\n // Keep a reference to the data that'll be iterated.\n uint256 packedPayoutLimitData;\n\n // Iterate through the stored packed values and return the value of the matching currency.\n for (uint256 i; i < numberOfData; i++) {\n // Set the data being iterated on.\n packedPayoutLimitData = data[i];\n\n // If the currencies match, return the value.\n if (currency == packedPayoutLimitData >> 224) {\n return uint256(uint224(packedPayoutLimitData));\n }\n }\n }\n\n /// @notice A project's surplus allowances for a given ruleset, terminal, and token.\n /// @notice The total value of `token`s that a project can pay out from its surplus in a terminal during the\n /// ruleset is dictated by a list of surplus allowances. Each surplus allowance is in terms of its own amount and\n /// currency.\n /// @dev The number of decimals in the returned fixed point amount is the same as that of the specified terminal.\n /// @param projectId The ID of the project to get the surplus allowances of.\n /// @param rulesetId The ID of the ruleset the surplus allowances applies to.\n /// @param terminal The terminal the surplus allowances applies to.\n /// @param token The token the surplus allowances applies to.\n /// @return surplusAllowances The surplus allowances.\n function surplusAllowancesOf(\n uint256 projectId,\n uint256 rulesetId,\n address terminal,\n address token\n )\n external\n view\n override\n returns (JBCurrencyAmount[] memory surplusAllowances)\n {\n // Get a reference to the packed data.\n uint256[] memory packedSurplusAllowancesData =\n _packedSurplusAllowancesDataOf[projectId][rulesetId][terminal][token];\n\n // Get a reference to the number of surplus allowances.\n uint256 numberOfData = packedSurplusAllowancesData.length;\n\n // Initialize the return value.\n surplusAllowances = new JBCurrencyAmount[](numberOfData);\n\n // Keep a reference to the data that'll be iterated.\n uint256 packedSurplusAllowanceData;\n\n // Iterate through the stored packed values and format the returned value.\n for (uint256 i; i < numberOfData; i++) {\n // Set the data being iterated on.\n packedSurplusAllowanceData = packedSurplusAllowancesData[i];\n\n // The limit is in bits 0-223. The currency is in bits 224-255.\n surplusAllowances[i] = JBCurrencyAmount({\n currency: packedSurplusAllowanceData >> 224,\n amount: uint256(uint224(packedSurplusAllowanceData))\n });\n }\n }\n\n /// @notice A project's surplus allowance for a specific currency and a given ruleset, terminal, and token.\n /// @dev The fixed point amount returned will have the same number of decimals as the specified terminal.\n /// @param projectId The ID of the project to get the surplus allowance of.\n /// @param rulesetId The ID of the ruleset the surplus allowance applies to.\n /// @param terminal The terminal the surplus allowance applies to.\n /// @param token The token the surplus allowance applies to.\n /// @param currency The currency that the surplus allowance is denominated in.\n /// @return surplusAllowance The surplus allowance, as a fixed point number with the same number of decimals as the\n /// provided terminal.\n function surplusAllowanceOf(\n uint256 projectId,\n uint256 rulesetId,\n address terminal,\n address token,\n uint256 currency\n )\n external\n view\n override\n returns (uint256 surplusAllowance)\n {\n // Get a reference to the packed data.\n uint256[] memory packedSurplusAllowancesData =\n _packedSurplusAllowancesDataOf[projectId][rulesetId][terminal][token];\n\n // Get a reference to the number of surplus allowances.\n uint256 numberOfData = packedSurplusAllowancesData.length;\n\n // Keep a reference to the data that'll be iterated.\n uint256 packedSurplusAllowanceData;\n\n // Iterate through the stored packed values and format the returned value.\n for (uint256 i; i < numberOfData; i++) {\n // Set the data being iterated on.\n packedSurplusAllowanceData = packedSurplusAllowancesData[i];\n\n // If the currencies match, return the value.\n if (currency == packedSurplusAllowanceData >> 224) {\n return uint256(uint224(packedSurplusAllowanceData));\n }\n }\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param directory A contract storing directories of terminals and controllers for each project.\n // solhint-disable-next-line no-empty-blocks\n constructor(IJBDirectory directory) JBControlled(directory) {}\n\n //*********************************************************************//\n // --------------------- external transactions ----------------------- //\n //*********************************************************************//\n\n /// @notice Sets limits for the amount of funds a project can access from its terminals during a ruleset.\n /// @dev Only a project's current controller can set its fund access limits.\n /// @dev Payout limits and surplus allowances must be specified in strictly increasing order (by currency) to\n /// prevent duplicates.\n /// @param projectId The ID of the project whose fund access limits are being set.\n /// @param rulesetId The ID of the ruleset that the limits will apply within.\n /// @param fundAccessLimitGroup An array containing payout limits and surplus allowances for each payment terminal.\n /// Amounts are fixed point numbers using the same number of decimals as the accompanying terminal.\n function setFundAccessLimitsFor(\n uint256 projectId,\n uint256 rulesetId,\n JBFundAccessLimitGroup[] calldata fundAccessLimitGroup\n )\n external\n override\n onlyControllerOf(projectId)\n {\n // Save the number of limits.\n uint256 numberOfFundAccessLimitGroups = fundAccessLimitGroup.length;\n\n // Keep a reference to the fund access constraint being iterated on.\n JBFundAccessLimitGroup calldata limits;\n\n // Set payout limits if there are any.\n for (uint256 i; i < numberOfFundAccessLimitGroups; i++) {\n // Set the limits being iterated on.\n limits = fundAccessLimitGroup[i];\n\n // Keep a reference to the number of payout limits.\n uint256 numberOfPayoutLimits = limits.payoutLimits.length;\n\n // Keep a reference to the payout limit being iterated on.\n JBCurrencyAmount calldata payoutLimit;\n\n // Iterate through each payout limit to validate and store them.\n for (uint256 j; j < numberOfPayoutLimits; j++) {\n // Set the payout limit being iterated on.\n payoutLimit = limits.payoutLimits[j];\n\n // If payout limit amount is larger than 224 bits, revert.\n if (payoutLimit.amount > type(uint224).max) {\n revert INVALID_PAYOUT_LIMIT();\n }\n\n // If payout limit currency's index is larger than 32 bits, revert.\n if (payoutLimit.currency > type(uint32).max) {\n revert INVALID_PAYOUT_LIMIT_CURRENCY();\n }\n\n // Make sure the payout limits are passed in increasing order of currency to prevent duplicates.\n if (j != 0 && payoutLimit.currency <= limits.payoutLimits[j - 1].currency) {\n revert INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING();\n }\n\n // Set the payout limit if there is one.\n if (payoutLimit.amount > 0) {\n _packedPayoutLimitsDataOf[projectId][rulesetId][fundAccessLimitGroup[i].terminal][fundAccessLimitGroup[i]\n .token].push(payoutLimit.amount | (payoutLimit.currency << 224));\n }\n }\n\n // Keep a reference to the number of surplus allowances.\n uint256 numberOfSurplusAllowances = limits.surplusAllowances.length;\n\n // Keep a reference to the surplus allowances being iterated on.\n JBCurrencyAmount calldata surplusAllowance;\n\n // Iterate through each surplus allowance to validate and store them.\n for (uint256 j; j < numberOfSurplusAllowances; j++) {\n // Set the payout limit being iterated on.\n surplusAllowance = limits.surplusAllowances[j];\n\n // If surplus allowance is larger than 224 bits, revert.\n if (surplusAllowance.amount > type(uint224).max) {\n revert INVALID_SURPLUS_ALLOWANCE();\n }\n\n // If surplus allowance currency value is larger than 32 bits, revert.\n if (surplusAllowance.currency > type(uint32).max) {\n revert INVALID_SURPLUS_ALLOWANCE_CURRENCY();\n }\n\n // Make sure the surplus allowances are passed in increasing order of currency to prevent duplicates.\n if (j != 0 && surplusAllowance.currency <= limits.surplusAllowances[j - 1].currency) {\n revert INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING();\n }\n\n // Set the surplus allowance if there is one.\n if (surplusAllowance.amount > 0) {\n _packedSurplusAllowancesDataOf[projectId][rulesetId][fundAccessLimitGroup[i].terminal][fundAccessLimitGroup[i]\n .token].push(surplusAllowance.amount | (surplusAllowance.currency << 224));\n }\n }\n\n emit SetFundAccessLimits(rulesetId, projectId, limits, msg.sender);\n }\n }\n}\n" + }, + "src/interfaces/IJBFundAccessLimits.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {JBFundAccessLimitGroup} from \"./../structs/JBFundAccessLimitGroup.sol\";\nimport {JBCurrencyAmount} from \"./../structs/JBCurrencyAmount.sol\";\n\ninterface IJBFundAccessLimits is IERC165 {\n event SetFundAccessLimits(\n uint256 indexed rulesetId, uint256 indexed projectId, JBFundAccessLimitGroup limits, address caller\n );\n\n function payoutLimitsOf(\n uint256 projectId,\n uint256 rulesetId,\n address terminal,\n address token\n )\n external\n view\n returns (JBCurrencyAmount[] memory payoutLimits);\n\n function payoutLimitOf(\n uint256 projectId,\n uint256 rulesetId,\n address terminal,\n address token,\n uint256 currency\n )\n external\n view\n returns (uint256 payoutLimit);\n\n function surplusAllowancesOf(\n uint256 projectId,\n uint256 rulesetId,\n address terminal,\n address token\n )\n external\n view\n returns (JBCurrencyAmount[] memory surplusAllowances);\n\n function surplusAllowanceOf(\n uint256 projectId,\n uint256 rulesetId,\n address terminal,\n address token,\n uint256 currency\n )\n external\n view\n returns (uint256 surplusAllowance);\n\n function setFundAccessLimitsFor(\n uint256 projectId,\n uint256 rulesetId,\n JBFundAccessLimitGroup[] memory fundAccessConstaints\n )\n external;\n}\n" + }, + "src/structs/JBCurrencyAmount.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @custom:member amount The amount of the currency.\n/// @custom:member currency The currency's index in `JBCurrencyIds`.\nstruct JBCurrencyAmount {\n uint256 amount;\n uint256 currency;\n}\n" + }, + "src/structs/JBFundAccessLimitGroup.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBCurrencyAmount} from \"./JBCurrencyAmount.sol\";\n\n/// @dev Payout limit example: if the `amount` is 5, the `currency` is 1 (USD), and the terminal's token is ETH, then\n/// the project can pay out 5 USD worth of ETH during a ruleset.\n/// @dev Surplus allowance example: if the `amount` is 5, the `currency` is 1 (USD), and the terminal's token is ETH,\n/// then the project can pay out 5 USD worth of ETH from its surplus during a ruleset. A project's surplus is its\n/// balance minus its current combined payout limit.\n/// @dev If a project has multiple payout limits or surplus allowances, they are all available. They can all be used\n/// during a single ruleset.\n/// @dev The payout limits' and surplus allowances' fixed point amounts have the same number of decimals as the\n/// terminal.\n/// @custom:member terminal The terminal that the payout limits and surplus allowances apply to.\n/// @custom:member token The token that the payout limits and surplus allowances apply to within the `terminal`.\n/// @custom:member payoutLimits An array of payout limits. The payout limits cumulatively dictate the maximum value of\n/// `token`s a project can pay out from its balance in a terminal during a ruleset. Each payout limit can have a unique\n/// currency and amount.\n/// @custom:member surplusAllowances An array of surplus allowances. The surplus allowances cumulatively dictates the\n/// maximum value of `token`s a project can pay out from its surplus (balance less payouts) in a terminal during a\n/// ruleset. Each surplus allowance can have a unique currency and amount.\nstruct JBFundAccessLimitGroup {\n address terminal;\n address token;\n JBCurrencyAmount[] payoutLimits;\n JBCurrencyAmount[] surplusAllowances;\n}\n" + }, + "node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (metatx/ERC2771Context.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Context variant with ERC2771 support.\n *\n * WARNING: Avoid using this pattern in contracts that rely in a specific calldata length as they'll\n * be affected by any forwarder whose `msg.data` is suffixed with the `from` address according to the ERC2771\n * specification adding the address size in bytes (20) to the calldata size. An example of an unexpected\n * behavior could be an unintended fallback (or another function) invocation while trying to invoke the `receive`\n * function only accessible if `msg.data.length == 0`.\n *\n * WARNING: The usage of `delegatecall` in this contract is dangerous and may result in context corruption.\n * Any forwarded request to this contract triggering a `delegatecall` to itself will result in an invalid {_msgSender}\n * recovery.\n */\nabstract contract ERC2771Context is Context {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n address private immutable _trustedForwarder;\n\n /**\n * @dev Initializes the contract with a trusted forwarder, which will be able to\n * invoke functions on this contract on behalf of other accounts.\n *\n * NOTE: The trusted forwarder can be replaced by overriding {trustedForwarder}.\n */\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor(address trustedForwarder_) {\n _trustedForwarder = trustedForwarder_;\n }\n\n /**\n * @dev Returns the address of the trusted forwarder.\n */\n function trustedForwarder() public view virtual returns (address) {\n return _trustedForwarder;\n }\n\n /**\n * @dev Indicates whether any particular address is the trusted forwarder.\n */\n function isTrustedForwarder(address forwarder) public view virtual returns (bool) {\n return forwarder == trustedForwarder();\n }\n\n /**\n * @dev Override for `msg.sender`. Defaults to the original `msg.sender` whenever\n * a call is not performed by the trusted forwarder or the calldata length is less than\n * 20 bytes (an address length).\n */\n function _msgSender() internal view virtual override returns (address) {\n uint256 calldataLength = msg.data.length;\n uint256 contextSuffixLength = _contextSuffixLength();\n if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) {\n return address(bytes20(msg.data[calldataLength - contextSuffixLength:]));\n } else {\n return super._msgSender();\n }\n }\n\n /**\n * @dev Override for `msg.data`. Defaults to the original `msg.data` whenever\n * a call is not performed by the trusted forwarder or the calldata length is less than\n * 20 bytes (an address length).\n */\n function _msgData() internal view virtual override returns (bytes calldata) {\n uint256 calldataLength = msg.data.length;\n uint256 contextSuffixLength = _contextSuffixLength();\n if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) {\n return msg.data[:calldataLength - contextSuffixLength];\n } else {\n return super._msgData();\n }\n }\n\n /**\n * @dev ERC-2771 specifies the context as being a single address (20 bytes).\n */\n function _contextSuffixLength() internal view virtual override returns (uint256) {\n return 20;\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC20Permit} from \"../extensions/IERC20Permit.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n /**\n * @dev An operation with an ERC20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data);\n if (returndata.length != 0 && !abi.decode(returndata, (bool))) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n // and not revert is the subcall reverts.\n\n (bool success, bytes memory returndata) = address(token).call(data);\n return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;\n }\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n" + }, + "src/JBController.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {Context} from \"@openzeppelin/contracts/utils/Context.sol\";\nimport {ERC165} from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {ERC2771Context} from \"@openzeppelin/contracts/metatx/ERC2771Context.sol\";\nimport {mulDiv} from \"@prb/math/src/Common.sol\";\nimport {JBPermissionIds} from \"@bananapus/permission-ids/src/JBPermissionIds.sol\";\nimport {JBPermissioned} from \"./abstract/JBPermissioned.sol\";\nimport {JBApprovalStatus} from \"./enums/JBApprovalStatus.sol\";\nimport {IJBController} from \"./interfaces/IJBController.sol\";\nimport {IJBDirectory} from \"./interfaces/IJBDirectory.sol\";\nimport {IJBFundAccessLimits} from \"./interfaces/IJBFundAccessLimits.sol\";\nimport {IJBRulesets} from \"./interfaces/IJBRulesets.sol\";\nimport {IJBDirectoryAccessControl} from \"./interfaces/IJBDirectoryAccessControl.sol\";\nimport {IJBMigratable} from \"./interfaces/IJBMigratable.sol\";\nimport {IJBPermissioned} from \"./interfaces/IJBPermissioned.sol\";\nimport {IJBRulesetDataHook} from \"./interfaces/IJBRulesetDataHook.sol\";\nimport {IJBPermissions} from \"./interfaces/IJBPermissions.sol\";\nimport {IJBTerminal} from \"./interfaces/terminal/IJBTerminal.sol\";\nimport {IJBProjects} from \"./interfaces/IJBProjects.sol\";\nimport {IJBProjectUriRegistry} from \"./interfaces/IJBProjectUriRegistry.sol\";\nimport {IJBSplitHook} from \"./interfaces/IJBSplitHook.sol\";\nimport {IJBSplits} from \"./interfaces/IJBSplits.sol\";\nimport {IJBToken} from \"./interfaces/IJBToken.sol\";\nimport {IJBTokens} from \"./interfaces/IJBTokens.sol\";\nimport {JBConstants} from \"./libraries/JBConstants.sol\";\nimport {JBRulesetMetadataResolver} from \"./libraries/JBRulesetMetadataResolver.sol\";\nimport {JBSplitGroupIds} from \"./libraries/JBSplitGroupIds.sol\";\nimport {JBRuleset} from \"./structs/JBRuleset.sol\";\nimport {JBRulesetWithMetadata} from \"./structs/JBRulesetWithMetadata.sol\";\nimport {JBRulesetConfig} from \"./structs/JBRulesetConfig.sol\";\nimport {JBRulesetMetadata} from \"./structs/JBRulesetMetadata.sol\";\nimport {JBTerminalConfig} from \"./structs/JBTerminalConfig.sol\";\nimport {JBSplit} from \"./structs/JBSplit.sol\";\nimport {JBSplitGroup} from \"./structs/JBSplitGroup.sol\";\nimport {JBSplitHookContext} from \"./structs/JBSplitHookContext.sol\";\n\n/// @notice Stitches together rulesets and project tokens, making sure all activity is accounted for and correct.\ncontract JBController is JBPermissioned, ERC2771Context, ERC165, IJBController, IJBMigratable {\n // A library that parses packed ruleset metadata into a friendlier format.\n using JBRulesetMetadataResolver for JBRuleset;\n\n // A library that adds default safety checks to ERC20 functionality.\n using SafeERC20 for IERC20;\n\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n\n error RULESET_ALREADY_LAUNCHED();\n error INVALID_BASE_CURRENCY();\n error INVALID_REDEMPTION_RATE();\n error INVALID_RESERVED_RATE();\n error CONTROLLER_MIGRATION_NOT_ALLOWED();\n error MINT_NOT_ALLOWED_AND_NOT_TERMINAL_OR_HOOK();\n error NO_BURNABLE_TOKENS();\n error CREDIT_TRANSFERS_PAUSED();\n error ZERO_TOKENS_TO_MINT();\n\n //*********************************************************************//\n // --------------- public immutable stored properties ---------------- //\n //*********************************************************************//\n\n /// @notice Mints ERC-721s that represent project ownership and transfers.\n IJBProjects public immutable override PROJECTS;\n\n /// @notice The directory of terminals and controllers for projects.\n IJBDirectory public immutable override DIRECTORY;\n\n /// @notice The contract storing and managing project rulesets.\n IJBRulesets public immutable override RULESETS;\n\n /// @notice The contract that manages token minting and burning.\n IJBTokens public immutable override TOKENS;\n\n /// @notice The contract that stores splits for each project.\n IJBSplits public immutable override SPLITS;\n\n /// @notice A contract that stores fund access limits for each project.\n IJBFundAccessLimits public immutable override FUND_ACCESS_LIMITS;\n\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice The reserved token balance that has not yet been realized (sent out to the reserved split group) for a\n /// project.\n /// @custom:param projectId The ID of the project to get the pending reserved token balance of.\n mapping(uint256 projectId => uint256) public override pendingReservedTokenBalanceOf;\n\n /// @notice The metadata URI for each project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.\n /// @custom:param projectId The ID of the project to which the metadata belongs.\n mapping(uint256 projectId => string) public override uriOf;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice Gets the current token supply of a project, including pending reserved tokens.\n /// @param projectId The ID of the project to get the total token supply of.\n /// @return The current total token supply of the project, including pending reserved tokens that have not been sent\n /// to splits yet.\n function totalTokenSupplyWithReservedTokensOf(uint256 projectId) external view override returns (uint256) {\n // Add the reserved tokens to the total supply.\n return TOKENS.totalSupplyOf(projectId) + pendingReservedTokenBalanceOf[projectId];\n }\n\n /// @notice A get `JBRuleset` and `JBRulesetMetadata` structs for the specified `rulesetId`.\n /// @param projectId The ID of the project the ruleset belongs to.\n /// @return ruleset The ruleset as a `JBRuleset` struct.\n /// @return metadata The ruleset's metadata as a `JBRulesetMetadata` struct.\n function getRulesetOf(\n uint256 projectId,\n uint256 rulesetId\n )\n external\n view\n override\n returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata)\n {\n ruleset = RULESETS.getRulesetOf(projectId, rulesetId);\n metadata = ruleset.expandMetadata();\n }\n\n /// @notice The latest ruleset queued for a project. Returns the ruleset's struct, its current approval status, and\n /// its metadata.\n /// @param projectId The ID of the project the ruleset belongs to.\n /// @return ruleset The latest queued ruleset as a `JBRuleset` struct.\n /// @return metadata The latest queued ruleset's metadata as a `JBRulesetMetadata` struct.\n /// @return approvalStatus The approval status of the ruleset.\n function latestQueuedRulesetOf(uint256 projectId)\n external\n view\n override\n returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata, JBApprovalStatus approvalStatus)\n {\n (ruleset, approvalStatus) = RULESETS.latestQueuedRulesetOf(projectId);\n metadata = ruleset.expandMetadata();\n }\n\n /// @notice Get an array of a project's rulesets (with metadata) up to a maximum array size, sorted from latest to\n /// earliest.\n /// @param projectId The ID of the project to get the rulesets of.\n /// @param startingId The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is\n /// passed, the project's latest ruleset will be used.\n /// @param size The maximum number of rulesets to return.\n /// @return rulesets The rulesets with their metadata as an array of `JBRulesetWithMetadata` structs.\n function rulesetsOf(\n uint256 projectId,\n uint256 startingId,\n uint256 size\n )\n external\n view\n override\n returns (JBRulesetWithMetadata[] memory rulesets)\n {\n // Get the rulesets.\n JBRuleset[] memory baseRulesets = RULESETS.rulesetsOf(projectId, startingId, size);\n\n // Keep a reference to the number of rulesets.\n uint256 numberOfRulesets = baseRulesets.length;\n\n // Initialize the array being returned.\n rulesets = new JBRulesetWithMetadata[](numberOfRulesets);\n\n // Keep a reference to the ruleset being iterated on.\n JBRuleset memory baseRuleset;\n\n // Populate the array with the rulesets and their metadata.\n for (uint256 i; i < numberOfRulesets; i++) {\n // Set the ruleset being iterated on.\n baseRuleset = baseRulesets[i];\n\n // Set the returned value.\n rulesets[i] = JBRulesetWithMetadata({ruleset: baseRuleset, metadata: baseRuleset.expandMetadata()});\n }\n }\n\n /// @notice A project's current ruleset along with its metadata.\n /// @param projectId The ID of the project the ruleset belongs to.\n /// @return ruleset The current ruleset as a `JBRuleset` struct.\n /// @return metadata The current ruleset's metadata as a `JBRulesetMetadata` struct.\n function currentRulesetOf(uint256 projectId)\n external\n view\n override\n returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata)\n {\n ruleset = RULESETS.currentOf(projectId);\n metadata = ruleset.expandMetadata();\n }\n\n /// @notice A project's upcoming ruleset along with its metadata.\n /// @dev If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.\n /// @param projectId The ID of the project the ruleset belongs to.\n /// @return ruleset The upcoming ruleset as a `JBRuleset` struct.\n /// @return metadata The upcoming ruleset's metadata as a `JBRulesetMetadata` struct.\n function upcomingRulesetOf(uint256 projectId)\n external\n view\n override\n returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata)\n {\n ruleset = RULESETS.upcomingRulesetOf(projectId);\n metadata = ruleset.expandMetadata();\n }\n\n /// @notice A flag indicating if the project currently allows terminals to be set.\n /// @param projectId The ID of the project the flag is for.\n /// @return The flag\n function setTerminalsAllowed(uint256 projectId) external view returns (bool) {\n return RULESETS.currentOf(projectId).expandMetadata().allowSetTerminals;\n }\n\n /// @notice A flag indicating if the project currently allows its controller to be set.\n /// @param projectId The ID of the project the flag is for.\n /// @return The flag\n function setControllerAllowed(uint256 projectId) external view returns (bool) {\n return RULESETS.currentOf(projectId).expandMetadata().allowSetController;\n }\n\n //*********************************************************************//\n // -------------------------- public views --------------------------- //\n //*********************************************************************//\n\n /// @notice Indicates if this contract adheres to the specified interface.\n /// @dev See {IERC165-supportsInterface}.\n /// @param interfaceId The ID of the interface to check for adherance to.\n /// @return A flag indicating if the provided interface ID is supported.\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n return interfaceId == type(IJBController).interfaceId || interfaceId == type(IJBProjectUriRegistry).interfaceId\n || interfaceId == type(IJBDirectoryAccessControl).interfaceId || interfaceId == type(IJBMigratable).interfaceId\n || interfaceId == type(IJBPermissioned).interfaceId || super.supportsInterface(interfaceId);\n }\n\n //*********************************************************************//\n // ---------------------------- constructor -------------------------- //\n //*********************************************************************//\n\n /// @param permissions A contract storing permissions.\n /// @param projects A contract which mints ERC-721s that represent project ownership and transfers.\n /// @param directory A contract storing directories of terminals and controllers for each project.\n /// @param rulesets A contract storing and managing project rulesets.\n /// @param tokens A contract that manages token minting and burning.\n /// @param splits A contract that stores splits for each project.\n /// @param fundAccessLimits A contract that stores fund access limits for each project.\n constructor(\n IJBPermissions permissions,\n IJBProjects projects,\n IJBDirectory directory,\n IJBRulesets rulesets,\n IJBTokens tokens,\n IJBSplits splits,\n IJBFundAccessLimits fundAccessLimits,\n address trustedForwarder\n )\n JBPermissioned(permissions)\n ERC2771Context(trustedForwarder)\n {\n PROJECTS = projects;\n DIRECTORY = directory;\n RULESETS = rulesets;\n TOKENS = tokens;\n SPLITS = splits;\n FUND_ACCESS_LIMITS = fundAccessLimits;\n }\n\n //*********************************************************************//\n // --------------------- external transactions ----------------------- //\n //*********************************************************************//\n\n /// @notice Creates a project. This will mint the project's ERC-721 to the specified owner's account, queue its\n /// first ruleset, and set up any splits.\n /// @dev Each operation within this transaction can be done in sequence separately.\n /// @dev Anyone can deploy a project on an owner's behalf.\n /// @param owner The address to set as the owner of the project. The project ERC-721 will be owned by this address.\n /// @param projectUri A URI to associate with the project. This can be updated any time by the owner of the\n /// project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.\n /// @param rulesetConfigurations The ruleset configurations to queue.\n /// @param terminalConfigurations The terminal configurations to add for the project.\n /// @param memo A memo to pass along to the emitted event.\n /// @return projectId The ID of the project.\n function launchProjectFor(\n address owner,\n string calldata projectUri,\n JBRulesetConfig[] calldata rulesetConfigurations,\n JBTerminalConfig[] calldata terminalConfigurations,\n string memory memo\n )\n external\n virtual\n override\n returns (uint256 projectId)\n {\n // Mint the project into the wallet of the owner.\n projectId = PROJECTS.createFor(owner);\n\n // Set project metadata if one was provided.\n if (bytes(projectUri).length > 0) {\n uriOf[projectId] = projectUri;\n }\n\n // Set this contract as the project's controller in the directory.\n DIRECTORY.setControllerOf(projectId, IERC165(this));\n\n // Queue the first ruleset.\n uint256 rulesetId = _queueRulesets(projectId, rulesetConfigurations);\n\n // Configure the terminals.\n _configureTerminals(projectId, terminalConfigurations);\n\n emit LaunchProject(rulesetId, projectId, projectUri, memo, _msgSender());\n }\n\n /// @notice Creates an initial sequence of one or more rulesets for an existing project.\n /// @dev Each operation within this transaction can be done in sequence separately.\n /// @dev Only a project's owner or an operator with the `QUEUE_RULESETS` permission can launch rulesets for a\n /// project.\n /// @param projectId The ID of the project to launch rulesets for.\n /// @param rulesetConfigurations The ruleset configurations to queue.\n /// @param terminalConfigurations The terminal configurations to add for the project.\n /// @param memo A memo to pass along to the emitted event.\n /// @return rulesetId The ID of the ruleset that was successfully launched.\n function launchRulesetsFor(\n uint256 projectId,\n JBRulesetConfig[] calldata rulesetConfigurations,\n JBTerminalConfig[] calldata terminalConfigurations,\n string memory memo\n )\n external\n virtual\n override\n returns (uint256 rulesetId)\n {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.QUEUE_RULESETS\n });\n\n // If the project has already had rulesets, `queueRulesetsOf(...)` should be called instead\n if (RULESETS.latestRulesetIdOf(projectId) > 0) {\n revert RULESET_ALREADY_LAUNCHED();\n }\n\n // Set this contract as the project's controller in the directory.\n DIRECTORY.setControllerOf(projectId, IERC165(this));\n\n // Queue the first ruleset.\n rulesetId = _queueRulesets(projectId, rulesetConfigurations);\n\n // Configure the terminals.\n _configureTerminals(projectId, terminalConfigurations);\n\n emit LaunchRulesets(rulesetId, projectId, memo, _msgSender());\n }\n\n /// @notice Queues one or more rulesets that will take effect once the current ruleset expires. Rulesets only take\n /// effect if they are approved by the previous ruleset's approval hook.\n /// @dev Only a project's owner or an operator with the `QUEUE_RULESETS` permission from them can queue rulesets for\n /// a project.\n /// @param projectId The ID of the project that rulesets are being queued for.\n /// @param rulesetConfigurations The configurations of the rulesets to queue.\n /// @param memo A memo to pass along to the emitted event.\n /// @return rulesetId The ID of the last ruleset which was successfully queued.\n function queueRulesetsOf(\n uint256 projectId,\n JBRulesetConfig[] calldata rulesetConfigurations,\n string calldata memo\n )\n external\n virtual\n override\n returns (uint256 rulesetId)\n {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.QUEUE_RULESETS\n });\n\n // Queue the next ruleset.\n rulesetId = _queueRulesets(projectId, rulesetConfigurations);\n\n emit QueueRulesets(rulesetId, projectId, memo, _msgSender());\n }\n\n /// @notice Mint new project tokens into an account, optionally reserving a portion according to the current\n /// ruleset's reserved rate.\n /// @dev Only a project's owner, an operator with the `MINT_TOKENS` permission from them, one of the project's\n /// terminals, or its current data hook can mint a project's tokens.\n /// @dev If the ruleset has discretionary minting disabled, this function can only be called by the terminal or data\n /// hook.\n /// @param projectId The ID of the project the tokens being minted belong to.\n /// @param tokenCount The total number of tokens to mint, including any tokens that will be reserved.\n /// @param beneficiary The account which will receive the (non-reserved) minted tokens.\n /// @param memo A memo to pass along to the emitted event.\n /// @param useReservedRate Whether to use the current ruleset's reserved rate in the minting calculations.\n /// @return beneficiaryTokenCount The number of tokens minted for the beneficiary.\n function mintTokensOf(\n uint256 projectId,\n uint256 tokenCount,\n address beneficiary,\n string calldata memo,\n bool useReservedRate\n )\n external\n virtual\n override\n returns (uint256 beneficiaryTokenCount)\n {\n // There should be tokens to mint.\n if (tokenCount == 0) revert ZERO_TOKENS_TO_MINT();\n\n // Keep a reference to the reserved rate to use\n uint256 reservedRate;\n\n // Get a reference to the project's current ruleset.\n JBRuleset memory ruleset = RULESETS.currentOf(projectId);\n\n // Minting limited to: project owner, operators with the `MINT_TOKENS` permission from the owner, the\n // project's terminals, or the project's current ruleset data hook\n _requirePermissionAllowingOverrideFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.MINT_TOKENS,\n alsoGrantAccessIf: DIRECTORY.isTerminalOf(projectId, IJBTerminal(_msgSender()))\n || _msgSender() == ruleset.dataHook()\n || (\n ruleset.dataHook() != address(0)\n && IJBRulesetDataHook(ruleset.dataHook()).hasMintPermissionFor(projectId, _msgSender())\n )\n });\n\n // If the message sender is not a terminal or a data hook, the current ruleset must allow minting if there is\n // one.\n if (\n ruleset.id != 0 && !ruleset.allowOwnerMinting()\n && !DIRECTORY.isTerminalOf(projectId, IJBTerminal(_msgSender()))\n && _msgSender() != address(ruleset.dataHook())\n && (\n ruleset.dataHook() == address(0)\n || !IJBRulesetDataHook(ruleset.dataHook()).hasMintPermissionFor(projectId, _msgSender())\n )\n ) revert MINT_NOT_ALLOWED_AND_NOT_TERMINAL_OR_HOOK();\n\n // Determine the reserved rate to use.\n reservedRate = useReservedRate ? ruleset.reservedRate() : 0;\n\n if (reservedRate != JBConstants.MAX_RESERVED_RATE) {\n // The unreserved number of tokens that will be minted to the beneficiary.\n beneficiaryTokenCount =\n mulDiv(tokenCount, JBConstants.MAX_RESERVED_RATE - reservedRate, JBConstants.MAX_RESERVED_RATE);\n\n // Mint the tokens.\n TOKENS.mintFor(beneficiary, projectId, beneficiaryTokenCount);\n }\n\n // Add reserved tokens to the pending balance if needed\n if (reservedRate > 0) {\n pendingReservedTokenBalanceOf[projectId] += tokenCount - beneficiaryTokenCount;\n }\n\n emit MintTokens(beneficiary, projectId, tokenCount, beneficiaryTokenCount, memo, reservedRate, _msgSender());\n }\n\n /// @notice Burns a project's tokens from a specific holder's balance.\n /// @dev Only a token holder, an operator with the `BURN_TOKENS` permission from them, or a project's terminal can\n /// burn a holder's tokens.\n /// @param holder The account whose tokens are being burned.\n /// @param projectId The ID of the project that the tokens being burned belong to.\n /// @param tokenCount The number of tokens to burn.\n /// @param memo A memo to pass along to the emitted event.\n function burnTokensOf(\n address holder,\n uint256 projectId,\n uint256 tokenCount,\n string calldata memo\n )\n external\n virtual\n override\n {\n // Enforce permissions.\n _requirePermissionAllowingOverrideFrom({\n account: holder,\n projectId: projectId,\n permissionId: JBPermissionIds.BURN_TOKENS,\n alsoGrantAccessIf: DIRECTORY.isTerminalOf(projectId, IJBTerminal(_msgSender()))\n });\n\n // There should be tokens to burn\n if (tokenCount == 0) revert NO_BURNABLE_TOKENS();\n\n // Burn the tokens.\n TOKENS.burnFrom(holder, projectId, tokenCount);\n\n emit BurnTokens(holder, projectId, tokenCount, memo, _msgSender());\n }\n\n /// @notice Sends a project's pending reserved tokens to its reserved token splits.\n /// @dev If the project has no reserved token splits, or they don't add up to 100%, the leftover tokens are minted\n /// to the project's owner.\n /// @param projectId The ID of the project to which the reserved tokens belong.\n /// @param memo A memo to pass along to the emitted event.\n /// @return The amount of reserved tokens minted and sent.\n function sendReservedTokensToSplitsOf(\n uint256 projectId,\n string calldata memo\n )\n external\n virtual\n override\n returns (uint256)\n {\n return _sendReservedTokensToSplitsOf(projectId, memo);\n }\n\n /// @notice Allows other controllers to signal to this one that a migration is expected for the specified project.\n /// @dev This controller should not yet be the project's controller.\n /// @param from The controller being migrated from.\n /// @param projectId The ID of the project that will be migrated to this controller.\n function receiveMigrationFrom(IERC165 from, uint256 projectId) external virtual override {\n projectId; // Prevents unused var compiler and natspec complaints.\n from; // Prevents unused var compiler and natspec complaints.\n\n // Copy the main metadata if relevant.\n if (\n from.supportsInterface(type(IJBProjectUriRegistry).interfaceId) && DIRECTORY.controllerOf(projectId) == from\n ) {\n uriOf[projectId] = IJBProjectUriRegistry(address(from)).uriOf(projectId);\n }\n }\n\n /// @notice Allows a project to migrate from this controller to another one.\n /// @dev Only a project's owner or an operator with the `MIGRATE_CONTROLLER` permission from the owner can migrate\n /// it.\n /// @param projectId The ID of the project that will be migrated from this controller.\n /// @param to The controller the project is migrating to.\n function migrateController(uint256 projectId, IJBMigratable to) external virtual override {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.MIGRATE_CONTROLLER\n });\n\n // Get a reference to the project's current ruleset.\n JBRuleset memory ruleset = RULESETS.currentOf(projectId);\n\n // Migration must be allowed.\n if (!ruleset.allowControllerMigration()) {\n revert CONTROLLER_MIGRATION_NOT_ALLOWED();\n }\n\n // All reserved tokens must be minted before migrating.\n if (pendingReservedTokenBalanceOf[projectId] != 0) {\n _sendReservedTokensToSplitsOf(projectId, \"\");\n }\n\n // Make sure the new controller is prepped for the migration.\n to.receiveMigrationFrom(IERC165(this), projectId);\n\n emit MigrateController(projectId, to, _msgSender());\n }\n\n /// @notice Set a project's metadata URI content.\n /// @dev Only a project's owner can set its metadata through the project's controller.\n /// @dev Frontends typically use an IPFS hash for the metadata content, optionally with the `ipfs://` prefix.\n /// @param projectId The ID of the project to set the metadata of.\n /// @param metadata The metadata content to set.\n function setUriOf(uint256 projectId, string calldata metadata) external override {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.SET_PROJECT_METADATA\n });\n\n // Set the project's new metadata content.\n uriOf[projectId] = metadata;\n\n emit SetMetadata(projectId, metadata, _msgSender());\n }\n\n /// @notice Sets a project's split groups.\n /// @dev Only a project's owner or an operator with `SET_SPLITS` permission from the owner can set its splits\n /// through the project's controller.\n /// @dev The new split groups must include any currently set splits that are locked.\n /// @param projectId The ID of the project split groups are being set for.\n /// @param rulesetId The ID of the ruleset the split groups should be active in. Use a `rulesetId` of 0 to set the\n /// default split groups which are active when a project's ruleset has no splits set. If no default splits have been\n /// set, all splits are sent to the project's owner.\n /// @param splitGroups An array of split groups to set.\n function setSplitGroupsOf(\n uint256 projectId,\n uint256 rulesetId,\n JBSplitGroup[] calldata splitGroups\n )\n external\n virtual\n override\n {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.SET_SPLITS\n });\n\n // Set splits for the group.\n SPLITS.setSplitGroupsOf(projectId, rulesetId, splitGroups);\n }\n\n /// @notice Deploys an ERC-20 token for a project. It will be used when claiming tokens (with credits).\n /// @dev Deploys a project's ERC-20 token contract.\n /// @dev Only a project's owner or an operator with `ISSUE_TOKENS` permission from the owner can deploy its token.\n /// @param projectId The ID of the project to deploy an ERC-20 token for.\n /// @param name The ERC-20's name.\n /// @param symbol The ERC-20's symbol.\n /// @return token The address of the token that was deployed.\n function deployERC20For(\n uint256 projectId,\n string calldata name,\n string calldata symbol,\n bytes32 salt\n )\n external\n virtual\n override\n returns (IJBToken token)\n {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.ISSUE_TOKEN\n });\n\n if (salt != bytes32(0)) salt = keccak256(abi.encodePacked(_msgSender(), salt));\n\n return TOKENS.deployERC20For(projectId, name, symbol, salt);\n }\n\n /// @notice Set a project's token if not already set.\n /// @dev Only a project's owner or an operator with `SET_TOKEN` permission from the owner can set its token.\n /// @param projectId The ID of the project to set the token of.\n /// @param token The new token's address.\n function setTokenFor(uint256 projectId, IJBToken token) external virtual override {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.SET_TOKEN\n });\n\n TOKENS.setTokenFor(projectId, token);\n }\n\n /// @notice Redeem credits to claim tokens into a holder's wallet.\n /// @dev Only a credit holder or an operator with the `CLAIM_TOKENS` permission from that holder can redeem those\n /// credits to claim tokens.\n /// @param holder The owner of the credits being redeemed.\n /// @param projectId The ID of the project whose tokens are being claimed.\n /// @param amount The amount of tokens to claim.\n /// @param beneficiary The account into which the claimed tokens will go.\n function claimTokensFor(\n address holder,\n uint256 projectId,\n uint256 amount,\n address beneficiary\n )\n external\n virtual\n override\n {\n // Enforce permissions.\n _requirePermissionFrom({account: holder, projectId: projectId, permissionId: JBPermissionIds.CLAIM_TOKENS});\n\n TOKENS.claimTokensFor(holder, projectId, amount, beneficiary);\n }\n\n /// @notice Allows a holder to transfer credits to another account.\n /// @dev Only a credit holder or an operator with the `TRANSFER_TOKENS` permission from that holder can transfer\n /// those credits.\n /// @param holder The address to transfer credits from.\n /// @param projectId The ID of the project whose credits are being transferred.\n /// @param recipient The recipient of the credits.\n /// @param amount The amount of credits to transfer.\n function transferCreditsFrom(\n address holder,\n uint256 projectId,\n address recipient,\n uint256 amount\n )\n external\n virtual\n override\n {\n // Enforce permissions.\n _requirePermissionFrom({account: holder, projectId: projectId, permissionId: JBPermissionIds.TRANSFER_TOKENS});\n\n // Get a reference to the current ruleset for the project.\n JBRuleset memory ruleset = RULESETS.currentOf(projectId);\n\n // Credit transfers must not be paused.\n if (ruleset.pauseCreditTransfers()) revert CREDIT_TRANSFERS_PAUSED();\n\n TOKENS.transferCreditsFrom(holder, projectId, recipient, amount);\n }\n\n /// @notice Pay the reserved rate tokens to a projects terminal.\n /// @dev Can only be called by this terminal itself.\n /// @param terminal The terminal to pay the token to.\n /// @param projectId The projectId that is being paid.\n /// @param token The token that is being paid.\n /// @param splitAmount The amount that is being send to the terminal as part of this split.\n /// @param beneficiary The beneficiary of the payment.\n /// @param metadata The metadata that gets send to the terminal.\n function payReservedTokenToTerminal(\n IJBTerminal terminal,\n uint256 projectId,\n IJBToken token,\n uint256 splitAmount,\n address beneficiary,\n bytes calldata metadata\n )\n external\n {\n // Can only be called by this contract.\n require(msg.sender == address(this));\n\n // Approve the terminal.\n IERC20(address(token)).forceApprove(address(terminal), splitAmount);\n\n // Perform the pay.\n // slither-disable-next-line unused-return\n terminal.pay({\n projectId: projectId,\n token: address(token),\n amount: splitAmount,\n beneficiary: beneficiary,\n minReturnedTokens: 0,\n memo: \"\",\n metadata: metadata\n });\n\n // Make sure that the terminal took the tokens.\n assert(IERC20(address(token)).allowance(address(this), address(terminal)) == 0);\n }\n\n //*********************************************************************//\n // ---------------------- internal transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Returns the sender, prefered to use over `_msgSender()`\n /// @return sender the sender address of this call.\n function _msgSender() internal view override(ERC2771Context, Context) returns (address sender) {\n return ERC2771Context._msgSender();\n }\n\n /// @notice Returns the calldata, prefered to use over `msg.data`\n /// @return calldata the `msg.data` of this call\n function _msgData() internal view override(ERC2771Context, Context) returns (bytes calldata) {\n return ERC2771Context._msgData();\n }\n\n /// @dev ERC-2771 specifies the context as being a single address (20 bytes).\n function _contextSuffixLength() internal view virtual override(ERC2771Context, Context) returns (uint256) {\n return super._contextSuffixLength();\n }\n\n //*********************************************************************//\n // ---------------------- internal transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Sends pending reserved tokens to the project's reserved token splits.\n /// @dev If the project has no reserved token splits, or they don't add up to 100%, the leftover tokens are minted\n /// to the project's owner.\n /// @param projectId The ID of the project the reserved tokens belong to.\n /// @param memo A memo to pass along to the emitted event.\n /// @return tokenCount The number of reserved tokens minted/sent.\n function _sendReservedTokensToSplitsOf(\n uint256 projectId,\n string memory memo\n )\n internal\n returns (uint256 tokenCount)\n {\n // Get the current ruleset to read the reserved rate from.\n JBRuleset memory ruleset = RULESETS.currentOf(projectId);\n\n // Get a reference to the number of tokens that need to be minted.\n tokenCount = pendingReservedTokenBalanceOf[projectId];\n\n // Reset the reserved token balance\n pendingReservedTokenBalanceOf[projectId] = 0;\n\n // Get a reference to the project owner.\n address owner = PROJECTS.ownerOf(projectId);\n\n // Send tokens to splits and get a reference to the leftover amount to mint after all splits have gotten their\n // share.\n uint256 leftoverTokenCount = tokenCount == 0\n ? 0\n : _sendTokensToSplitGroupOf(projectId, ruleset.id, JBSplitGroupIds.RESERVED_TOKENS, tokenCount);\n\n // Mint any leftover tokens to the project owner.\n if (leftoverTokenCount > 0) {\n TOKENS.mintFor(owner, projectId, leftoverTokenCount);\n }\n\n emit SendReservedTokensToSplits(\n ruleset.id, ruleset.cycleNumber, projectId, owner, tokenCount, leftoverTokenCount, memo, _msgSender()\n );\n }\n\n /// @notice Send `_amount` project tokens to the specified group of splits.\n /// @dev This is used to send reserved tokens to the reserved token splits.\n /// @param projectId The ID of the project that the split group belongs to.\n /// @param rulesetId The ID of the ruleset of the group to send tokens to.\n /// @param groupId The group of the splits to send the tokens between.\n /// @param amount The total number of tokens to sent.\n /// @return leftoverAmount If the splits percents dont add up to 100%, the leftover amount is returned.\n function _sendTokensToSplitGroupOf(\n uint256 projectId,\n uint256 rulesetId,\n uint256 groupId,\n uint256 amount\n )\n internal\n returns (uint256 leftoverAmount)\n {\n // Set the leftover amount to the initial amount.\n leftoverAmount = amount;\n\n // Get a reference to the specified split group.\n JBSplit[] memory splits = SPLITS.splitsOf(projectId, rulesetId, groupId);\n\n // Keep a reference to the number of splits being iterated on.\n uint256 numberOfSplits = splits.length;\n\n //Transfer between all splits.\n for (uint256 i; i < numberOfSplits; i++) {\n // Get a reference to the split being iterated on.\n JBSplit memory split = splits[i];\n\n // Calculate the amount to send towards the split.\n uint256 splitAmount = mulDiv(amount, split.percent, JBConstants.SPLITS_TOTAL_PERCENT);\n\n // Mints tokens for the split if needed.\n if (splitAmount > 0) {\n // If a `hook` is set in the splits, fulfill its `processSplitWith` transaction.\n // Otherwise, if a `projectId` is set in the split, try to pay the project using the split's beneficiary\n // or the `_msgSender()` as the payment's beneficiary.\n // Otherwise, if the split has a beneficiary send to the split's beneficiary.\n // Otherwise, send to the `_msgSender()`.\n\n // If there's a split hook, trigger its `processSplitWith` function.\n if (split.hook != IJBSplitHook(address(0))) {\n // Mint the tokens for the split hook.\n TOKENS.mintFor(address(split.hook), projectId, splitAmount);\n\n // Get a reference to the project's token. This will return the 0 address if the project doesn't yet\n // have a token.\n IJBToken token = TOKENS.tokenOf(projectId);\n\n // Process.\n split.hook.processSplitWith(\n JBSplitHookContext({\n token: address(token),\n amount: splitAmount,\n decimals: 18, // Hardcoded in JBTokens.\n projectId: projectId,\n groupId: groupId,\n split: split\n })\n );\n // If there's a project ID, try to pay the project. If it fails, fallback to paying the beneficiary.\n } else {\n // Use the split's beneficiary if provided, otherwise use the msg sender.\n address beneficiary = split.beneficiary != address(0) ? split.beneficiary : _msgSender();\n\n if (split.projectId != 0) {\n // Get a reference to the project's token. This will return the 0 address if the project doesn't\n // yet have a token.\n IJBToken token = TOKENS.tokenOf(projectId);\n\n // Get a reference to the project's payment terminal that accepts the token.\n IJBTerminal terminal = token == IJBToken(address(0))\n ? IJBTerminal(address(0))\n : DIRECTORY.primaryTerminalOf(split.projectId, address(token));\n\n // If the paying project doesn't have a token or the receiving project isn't accepting the\n // token,\n // fallback to sending to the beneficiary.\n if (address(token) == address(0) || address(terminal) == address(0)) {\n // Mint the tokens.\n TOKENS.mintFor(beneficiary, projectId, splitAmount);\n } else {\n // Mint the tokens to this contract.\n TOKENS.mintFor(address(this), projectId, splitAmount);\n\n // Send the projectId in the metadata.\n bytes memory metadata = bytes(abi.encodePacked(projectId));\n\n // Try to fulfill the payment.\n try this.payReservedTokenToTerminal({\n projectId: split.projectId,\n terminal: terminal,\n token: token,\n splitAmount: splitAmount,\n beneficiary: beneficiary,\n metadata: metadata\n }) {} catch (bytes memory reason) {\n // Transfer the tokens from this contract to the beneficiary.\n IERC20(address(token)).safeTransfer(beneficiary, splitAmount);\n emit ReservedDistributionReverted(projectId, split, splitAmount, reason, _msgSender());\n }\n }\n // Check to see if the project accepts the token.\n // try to pay the project. catch revert to just paying the project owner.\n } else {\n // Mint the tokens.\n TOKENS.mintFor(beneficiary, projectId, splitAmount);\n }\n }\n\n // Subtract from the amount to be sent to the beneficiary.\n leftoverAmount = leftoverAmount - splitAmount;\n }\n\n emit SendReservedTokensToSplit(projectId, rulesetId, groupId, split, splitAmount, _msgSender());\n }\n }\n\n /// @notice Queues one or more ruleset configurations and stores information pertinent to the configuration.\n /// @param projectId The ID of the project the rulesets are being queued for.\n /// @param rulesetConfigurations Configurations for the rulesets being queued.\n /// @return rulesetId The ID of the last ruleset that was successfully queued.\n function _queueRulesets(\n uint256 projectId,\n JBRulesetConfig[] calldata rulesetConfigurations\n )\n internal\n returns (uint256 rulesetId)\n {\n // Keep a reference to the number of ruleset configurations being queued.\n uint256 numberOfConfigurations = rulesetConfigurations.length;\n\n // Keep a reference to the ruleset config being iterated on.\n JBRulesetConfig memory rulesetConfig;\n\n for (uint256 i; i < numberOfConfigurations; i++) {\n // Get a reference to the ruleset config being iterated on.\n rulesetConfig = rulesetConfigurations[i];\n\n // Make sure the provided reserved rate is valid.\n if (rulesetConfig.metadata.reservedRate > JBConstants.MAX_RESERVED_RATE) {\n revert INVALID_RESERVED_RATE();\n }\n\n // Make sure the provided redemption rate is valid.\n if (rulesetConfig.metadata.redemptionRate > JBConstants.MAX_REDEMPTION_RATE) {\n revert INVALID_REDEMPTION_RATE();\n }\n\n // Make sure the provided base currency is valid.\n if (rulesetConfig.metadata.baseCurrency > type(uint32).max) {\n revert INVALID_BASE_CURRENCY();\n }\n\n // Use the configuration to queue the ruleset.\n JBRuleset memory ruleset = RULESETS.queueFor({\n projectId: projectId,\n duration: rulesetConfig.duration,\n weight: rulesetConfig.weight,\n decayRate: rulesetConfig.decayRate,\n approvalHook: rulesetConfig.approvalHook,\n metadata: JBRulesetMetadataResolver.packRulesetMetadata(rulesetConfig.metadata),\n mustStartAtOrAfter: rulesetConfig.mustStartAtOrAfter\n });\n\n // Set the configuration's split groups.\n SPLITS.setSplitGroupsOf(projectId, ruleset.id, rulesetConfig.splitGroups);\n\n // Set the configuration's fund access limits.\n FUND_ACCESS_LIMITS.setFundAccessLimitsFor(projectId, ruleset.id, rulesetConfig.fundAccessLimitGroups);\n\n // Return the ruleset's ID if this is the last configuration being queued.\n if (i == numberOfConfigurations - 1) {\n rulesetId = ruleset.id;\n }\n }\n }\n\n /// @notice Configure terminals for use.\n /// @param projectId The ID of the project configuring the terminals for use.\n /// @param terminalConfigs The terminal configurations to enact.\n function _configureTerminals(uint256 projectId, JBTerminalConfig[] calldata terminalConfigs) internal {\n // Keep a reference to the number of terminals being configured.\n uint256 numberOfTerminalConfigs = terminalConfigs.length;\n\n // Set an array of terminals to populate.\n IJBTerminal[] memory terminals = new IJBTerminal[](numberOfTerminalConfigs);\n\n // Keep a reference to the terminal configuration being iterated on.\n JBTerminalConfig memory terminalConfig;\n\n for (uint256 i; i < numberOfTerminalConfigs; i++) {\n // Set the terminal configuration being iterated on.\n terminalConfig = terminalConfigs[i];\n\n // Set the accounting contexts for the given tokens.\n terminalConfig.terminal.addAccountingContextsFor(projectId, terminalConfig.tokensToAccept);\n\n // Add the terminal.\n terminals[i] = terminalConfig.terminal;\n }\n\n // Set the terminals in the directory.\n if (numberOfTerminalConfigs > 0) {\n DIRECTORY.setTerminalsOf(projectId, terminals);\n }\n }\n}\n" + }, + "src/interfaces/IJBController.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {JBApprovalStatus} from \"./../enums/JBApprovalStatus.sol\";\nimport {JBRuleset} from \"./../structs/JBRuleset.sol\";\nimport {JBRulesetWithMetadata} from \"./../structs/JBRulesetWithMetadata.sol\";\nimport {JBRulesetConfig} from \"./../structs/JBRulesetConfig.sol\";\nimport {JBRulesetMetadata} from \"./../structs/JBRulesetMetadata.sol\";\nimport {JBTerminalConfig} from \"./../structs/JBTerminalConfig.sol\";\nimport {JBSplit} from \"./../structs/JBSplit.sol\";\nimport {JBSplitGroup} from \"./../structs/JBSplitGroup.sol\";\nimport {IJBDirectory} from \"./IJBDirectory.sol\";\nimport {IJBDirectoryAccessControl} from \"./IJBDirectoryAccessControl.sol\";\nimport {IJBFundAccessLimits} from \"./IJBFundAccessLimits.sol\";\nimport {IJBRulesets} from \"./IJBRulesets.sol\";\nimport {IJBMigratable} from \"./IJBMigratable.sol\";\nimport {IJBProjectUriRegistry} from \"./IJBProjectUriRegistry.sol\";\nimport {IJBProjects} from \"./IJBProjects.sol\";\nimport {IJBSplits} from \"./IJBSplits.sol\";\nimport {IJBToken} from \"./IJBToken.sol\";\nimport {IJBTokens} from \"./IJBTokens.sol\";\n\ninterface IJBController is IERC165, IJBProjectUriRegistry, IJBDirectoryAccessControl {\n event LaunchProject(uint256 rulesetId, uint256 projectId, string metadata, string memo, address caller);\n\n event LaunchRulesets(uint256 rulesetId, uint256 projectId, string memo, address caller);\n\n event QueueRulesets(uint256 rulesetId, uint256 projectId, string memo, address caller);\n\n event SendReservedTokensToSplits(\n uint256 indexed rulesetId,\n uint256 indexed rulesetCycleNumber,\n uint256 indexed projectId,\n address beneficiary,\n uint256 tokenCount,\n uint256 beneficiaryTokenCount,\n string memo,\n address caller\n );\n\n event SendReservedTokensToSplit(\n uint256 indexed projectId,\n uint256 indexed rulesetId,\n uint256 indexed group,\n JBSplit split,\n uint256 tokenCount,\n address caller\n );\n\n event MintTokens(\n address indexed beneficiary,\n uint256 indexed projectId,\n uint256 tokenCount,\n uint256 beneficiaryTokenCount,\n string memo,\n uint256 reservedRate,\n address caller\n );\n\n event BurnTokens(\n address indexed holder, uint256 indexed projectId, uint256 tokenCount, string memo, address caller\n );\n\n event ReservedDistributionReverted(\n uint256 indexed projectId, JBSplit split, uint256 amount, bytes reason, address caller\n );\n\n event MigrateController(uint256 indexed projectId, IJBMigratable to, address caller);\n\n event PrepMigration(uint256 indexed projectId, address from, address caller);\n\n event SetMetadata(uint256 indexed projectId, string metadata, address caller);\n\n function PROJECTS() external view returns (IJBProjects);\n\n function DIRECTORY() external view returns (IJBDirectory);\n\n function RULESETS() external view returns (IJBRulesets);\n\n function TOKENS() external view returns (IJBTokens);\n\n function SPLITS() external view returns (IJBSplits);\n\n function FUND_ACCESS_LIMITS() external view returns (IJBFundAccessLimits);\n\n function pendingReservedTokenBalanceOf(uint256 projectId) external view returns (uint256);\n\n function totalTokenSupplyWithReservedTokensOf(uint256 projectId) external view returns (uint256);\n\n function getRulesetOf(\n uint256 projectId,\n uint256 rulesetId\n )\n external\n view\n returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);\n\n function latestQueuedRulesetOf(uint256 projectId)\n external\n view\n returns (JBRuleset memory, JBRulesetMetadata memory metadata, JBApprovalStatus);\n\n function rulesetsOf(\n uint256 projectId,\n uint256 startingId,\n uint256 size\n )\n external\n view\n returns (JBRulesetWithMetadata[] memory rulesets);\n\n function currentRulesetOf(uint256 projectId)\n external\n view\n returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);\n\n function upcomingRulesetOf(uint256 projectId)\n external\n view\n returns (JBRuleset memory ruleset, JBRulesetMetadata memory metadata);\n\n function launchProjectFor(\n address owner,\n string calldata projectUri,\n JBRulesetConfig[] calldata rulesetConfigurations,\n JBTerminalConfig[] memory terminalConfigurations,\n string calldata memo\n )\n external\n returns (uint256 projectId);\n\n function launchRulesetsFor(\n uint256 projectId,\n JBRulesetConfig[] calldata rulesetConfigurations,\n JBTerminalConfig[] memory terminalConfigurations,\n string calldata memo\n )\n external\n returns (uint256 rulesetId);\n\n function queueRulesetsOf(\n uint256 projectId,\n JBRulesetConfig[] calldata rulesetConfigurations,\n string calldata memo\n )\n external\n returns (uint256 rulesetId);\n\n function mintTokensOf(\n uint256 projectId,\n uint256 tokenCount,\n address beneficiary,\n string calldata memo,\n bool useReservedRate\n )\n external\n returns (uint256 beneficiaryTokenCount);\n\n function burnTokensOf(address holder, uint256 projectId, uint256 tokenCount, string calldata memo) external;\n\n function sendReservedTokensToSplitsOf(uint256 projectId, string memory memo) external returns (uint256);\n\n function migrateController(uint256 projectId, IJBMigratable to) external;\n\n function setSplitGroupsOf(uint256 projectId, uint256 rulesetId, JBSplitGroup[] calldata splitGroups) external;\n\n function deployERC20For(\n uint256 projectId,\n string calldata name,\n string calldata symbol,\n bytes32 salt\n )\n external\n returns (IJBToken token);\n\n function setTokenFor(uint256 _projectId, IJBToken _token) external;\n\n function claimTokensFor(address holder, uint256 projectId, uint256 amount, address beneficiary) external;\n\n function transferCreditsFrom(address holder, uint256 projectId, address recipient, uint256 amount) external;\n}\n" + }, + "src/interfaces/IJBMigratable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\ninterface IJBMigratable is IERC165 {\n function receiveMigrationFrom(IERC165 from, uint256 projectId) external;\n}\n" + }, + "src/interfaces/IJBProjectUriRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IJBProjectUriRegistry {\n function uriOf(uint256 projectId) external view returns (string memory);\n function setUriOf(uint256 projectId, string calldata metadata) external;\n}\n" + }, + "src/interfaces/IJBRedeemHook.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {JBAfterRedeemRecordedContext} from \"./../structs/JBAfterRedeemRecordedContext.sol\";\n\n/// @notice Hook called after a terminal's `redeemTokensOf(...)` logic completes (if passed by the ruleset's data hook).\ninterface IJBRedeemHook is IERC165 {\n /// @notice This function is called by the terminal's `redeemTokensOf(...)` function after the redemption has been\n /// recorded in the terminal store.\n /// @dev Critical business logic should be protected by appropriate access control.\n /// @param context The context passed in by the terminal, as a `JBAfterRedeemRecordedContext` struct.\n function afterRedeemRecordedWith(JBAfterRedeemRecordedContext calldata context) external payable;\n}\n" + }, + "src/interfaces/IJBRulesetDataHook.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {JBPayHookSpecification} from \"./../structs/JBPayHookSpecification.sol\";\nimport {JBBeforePayRecordedContext} from \"./../structs/JBBeforePayRecordedContext.sol\";\nimport {JBBeforeRedeemRecordedContext} from \"./../structs/JBBeforeRedeemRecordedContext.sol\";\nimport {JBRedeemHookSpecification} from \"./../structs/JBRedeemHookSpecification.sol\";\n\n/// @notice Data hooks can extend a terminal's core pay/redeem functionality by overriding the weight or memo. They can\n/// also specify pay/redeem hooks for the terminal to fulfill, or allow addresses to mint a project's tokens on-demand.\n/// @dev If a project's ruleset has `useDataHookForPay` or `useDataHookForRedeem` enabled, its `dataHook` is called by\n/// the terminal upon payments/redemptions (respectively).\ninterface IJBRulesetDataHook is IERC165 {\n /// @notice A flag indicating whether an address has permission to mint a project's tokens on-demand.\n /// @dev A project's data hook can allow any address to mint its tokens.\n /// @param projectId The ID of the project whose token can be minted.\n /// @param addr The address to check the token minting permission of.\n /// @return flag A flag indicating whether the address has permission to mint the project's tokens on-demand.\n function hasMintPermissionFor(uint256 projectId, address addr) external view returns (bool flag);\n\n /// @notice The data calculated before a payment is recorded in the terminal store. This data is provided to the\n /// terminal's `pay(...)` transaction.\n /// @param context The context passed to this data hook by the `pay(...)` function as a `JBBeforePayRecordedContext`\n /// struct.\n /// @return weight The new `weight` to use, overriding the ruleset's `weight`.\n /// @return hookSpecifications The amount and data to send to pay hooks instead of adding to the terminal's balance.\n function beforePayRecordedWith(JBBeforePayRecordedContext calldata context)\n external\n view\n returns (uint256 weight, JBPayHookSpecification[] memory hookSpecifications);\n\n /// @notice The data calculated before a redemption is recorded in the terminal store. This data is provided to the\n /// terminal's `redeemTokensOf(...)` transaction.\n /// @param context The context passed to this data hook by the `redeemTokensOf(...)` function as a\n /// `JBBeforeRedeemRecordedContext` struct.\n /// @return redemptionRate The rate determining the amount that should be reclaimable for a given surplus and token\n /// supply.\n /// @return redeemCount The amount of tokens that should be considered redeemed.\n /// @return totalSupply The total amount of tokens that are considered to be existing.\n /// @return hookSpecifications The amount and data to send to redeem hooks instead of returning to the beneficiary.\n function beforeRedeemRecordedWith(JBBeforeRedeemRecordedContext calldata context)\n external\n view\n returns (\n uint256 redemptionRate,\n uint256 redeemCount,\n uint256 totalSupply,\n JBRedeemHookSpecification[] memory hookSpecifications\n );\n}\n" + }, + "src/libraries/JBRulesetMetadataResolver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.17;\n\nimport {JBRuleset} from \"./../structs/JBRuleset.sol\";\nimport {JBRulesetMetadata} from \"./../structs/JBRulesetMetadata.sol\";\n\nlibrary JBRulesetMetadataResolver {\n function reservedRate(JBRuleset memory ruleset) internal pure returns (uint256) {\n return uint256(uint16(ruleset.metadata >> 4));\n }\n\n function redemptionRate(JBRuleset memory ruleset) internal pure returns (uint256) {\n // Redemption rate is a number 0-10000.\n return uint256(uint16(ruleset.metadata >> 20));\n }\n\n function setRedemptionRateTo(JBRuleset memory ruleset, uint256 value) internal pure returns (JBRuleset memory) {\n // redemption rate in bits 20-35 (16 bits).\n // redemption rate is a number 0-10000.\n JBRulesetMetadata memory adjustedMetadata = expandMetadata(ruleset);\n adjustedMetadata.redemptionRate = value;\n ruleset.metadata = packRulesetMetadata(adjustedMetadata);\n return ruleset;\n }\n\n function baseCurrency(JBRuleset memory ruleset) internal pure returns (uint256) {\n // Currency is a number 0-4294967296.\n return uint256(uint32(ruleset.metadata >> 36));\n }\n\n function pausePay(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 68) & 1) == 1;\n }\n\n function pauseCreditTransfers(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 69) & 1) == 1;\n }\n\n function allowOwnerMinting(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 70) & 1) == 1;\n }\n\n function allowTerminalMigration(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 71) & 1) == 1;\n }\n\n function allowSetTerminals(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 72) & 1) == 1;\n }\n\n function allowControllerMigration(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 73) & 1) == 1;\n }\n\n function allowSetController(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 74) & 1) == 1;\n }\n\n function holdFees(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 75) & 1) == 1;\n }\n\n function useTotalSurplusForRedemptions(JBRuleset memory ruleset) internal pure returns (bool) {\n return ((ruleset.metadata >> 76) & 1) == 1;\n }\n\n function useDataHookForPay(JBRuleset memory ruleset) internal pure returns (bool) {\n return (ruleset.metadata >> 77) & 1 == 1;\n }\n\n function useDataHookForRedeem(JBRuleset memory ruleset) internal pure returns (bool) {\n return (ruleset.metadata >> 78) & 1 == 1;\n }\n\n function dataHook(JBRuleset memory ruleset) internal pure returns (address) {\n return address(uint160(ruleset.metadata >> 79));\n }\n\n function metadata(JBRuleset memory ruleset) internal pure returns (uint256) {\n return uint256(uint16(ruleset.metadata >> 239));\n }\n\n /// @notice Pack the funding cycle metadata.\n /// @param rulesetMetadata The ruleset metadata to validate and pack.\n /// @return packed The packed uint256 of all metadata params. The first 8 bits specify the version.\n function packRulesetMetadata(JBRulesetMetadata memory rulesetMetadata) internal pure returns (uint256 packed) {\n // version 1 in the bits 0-3 (4 bits).\n packed = 1;\n // reserved rate in bits 4-19 (16 bits).\n packed |= rulesetMetadata.reservedRate << 4;\n // redemption rate in bits 20-35 (16 bits).\n // redemption rate is a number 0-10000.\n packed |= rulesetMetadata.redemptionRate << 20;\n // base currency in bits 36-67 (32 bits).\n // base currency is a number 0-16777215.\n packed |= rulesetMetadata.baseCurrency << 36;\n // pause pay in bit 68.\n if (rulesetMetadata.pausePay) packed |= 1 << 68;\n // pause credit transfers in bit 69.\n if (rulesetMetadata.pauseCreditTransfers) packed |= 1 << 69;\n // allow discretionary minting in bit 70.\n if (rulesetMetadata.allowOwnerMinting) packed |= 1 << 70;\n // allow terminal migration in bit 71.\n if (rulesetMetadata.allowTerminalMigration) packed |= 1 << 71;\n // allow set terminals in bit 72.\n if (rulesetMetadata.allowSetTerminals) packed |= 1 << 72;\n // allow controller migration in bit 73.\n if (rulesetMetadata.allowControllerMigration) packed |= 1 << 73;\n // allow set controller in bit 74.\n if (rulesetMetadata.allowSetController) packed |= 1 << 74;\n // hold fees in bit 75.\n if (rulesetMetadata.holdFees) packed |= 1 << 75;\n // useTotalSurplusForRedemptions in bit 76.\n if (rulesetMetadata.useTotalSurplusForRedemptions) packed |= 1 << 76;\n // use pay data source in bit 77.\n if (rulesetMetadata.useDataHookForPay) packed |= 1 << 77;\n // use redeem data source in bit 78.\n if (rulesetMetadata.useDataHookForRedeem) packed |= 1 << 78;\n // data source address in bits 79-238.\n packed |= uint256(uint160(address(rulesetMetadata.dataHook))) << 79;\n // metadata in bits 239-254 (16 bits).\n packed |= rulesetMetadata.metadata << 239;\n }\n\n /// @notice Expand the funding cycle metadata.\n /// @param ruleset The funding cycle having its metadata expanded.\n /// @return rulesetMetadata The ruleset's metadata object.\n function expandMetadata(JBRuleset memory ruleset) internal pure returns (JBRulesetMetadata memory) {\n return JBRulesetMetadata(\n reservedRate(ruleset),\n redemptionRate(ruleset),\n baseCurrency(ruleset),\n pausePay(ruleset),\n pauseCreditTransfers(ruleset),\n allowOwnerMinting(ruleset),\n allowTerminalMigration(ruleset),\n allowSetTerminals(ruleset),\n allowControllerMigration(ruleset),\n allowSetController(ruleset),\n holdFees(ruleset),\n useTotalSurplusForRedemptions(ruleset),\n useDataHookForPay(ruleset),\n useDataHookForRedeem(ruleset),\n dataHook(ruleset),\n metadata(ruleset)\n );\n }\n}\n" + }, + "src/libraries/JBSplitGroupIds.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nlibrary JBSplitGroupIds {\n uint256 public constant RESERVED_TOKENS = 1;\n}\n" + }, + "src/structs/JBAfterRedeemRecordedContext.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBTokenAmount} from \"./JBTokenAmount.sol\";\n\n/// @custom:member holder The holder of the tokens being redeemed.\n/// @custom:member projectId The ID of the project being redeemed from.\n/// @custom:member rulesetId The ID of the ruleset the redemption is being made during.\n/// @custom:member redeemCount The number of project tokens being redeemed.\n/// @custom:member redemptionRate The current ruleset's redemption rate.\n/// @custom:member reclaimedAmount The token amount being reclaimed from the project's terminal balance. Includes the\n/// token being\n/// reclaimed, the value, the number of decimals included, and the currency of the amount.\n/// @custom:member forwardedAmount The token amount being forwarded to the redeem hook. Includes the token\n/// being forwarded, the value, the number of decimals included, and the currency of the amount.\n/// @custom:member beneficiary The address the reclaimed amount will be sent to.\n/// @custom:member hookMetadata Extra data specified by the data hook, which is sent to the redeem hook.\n/// @custom:member redeemerMetadata Extra data specified by the redeemer, which is sent to the redeem hook.\nstruct JBAfterRedeemRecordedContext {\n address holder;\n uint256 projectId;\n uint256 rulesetId;\n uint256 redeemCount;\n JBTokenAmount reclaimedAmount;\n JBTokenAmount forwardedAmount;\n uint256 redemptionRate;\n address payable beneficiary;\n bytes hookMetadata;\n bytes redeemerMetadata;\n}\n" + }, + "src/structs/JBBeforePayRecordedContext.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBTokenAmount} from \"./JBTokenAmount.sol\";\n\n/// @notice Context sent from the terminal to the ruleset's data hook upon payment.\n/// @custom:member terminal The terminal that is facilitating the payment.\n/// @custom:member payer The address that the payment originated from.\n/// @custom:member amount The payment's token amount, including the token being paid, the value, the number of decimals\n/// included, and the currency of the amount.\n/// @custom:member projectId The ID of the project being paid.\n/// @custom:member rulesetId The ID of the ruleset the payment is being made during.\n/// @custom:member beneficiary The specified address that should be the beneficiary of anything that this payment\n/// yields.\n/// @custom:member weight The weight of the ruleset during which the payment is being made.\n/// @custom:member reservedRate The reserved rate of the ruleset the payment is being made during.\n/// @custom:member metadata Extra data specified by the payer.\nstruct JBBeforePayRecordedContext {\n address terminal;\n address payer;\n JBTokenAmount amount;\n uint256 projectId;\n uint256 rulesetId;\n address beneficiary;\n uint256 weight;\n uint256 reservedRate;\n bytes metadata;\n}\n" + }, + "src/structs/JBBeforeRedeemRecordedContext.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBTokenAmount} from \"./JBTokenAmount.sol\";\n\n/// @notice Context sent from the terminal to the ruleset's data hook upon redemption.\n/// @custom:member terminal The terminal that is facilitating the redemption.\n/// @custom:member holder The holder of the tokens being redeemed.\n/// @custom:member projectId The ID of the project whose tokens are being redeemed.\n/// @custom:member rulesetId The ID of the ruleset the redemption is being made during.\n/// @custom:member redeemCount The number of tokens being redeemed, as a fixed point number with 18 decimals.\n/// @custom:member totalSupply The total token supply being used for the calculation, as a fixed point number with 18\n/// decimals.\n/// @custom:member surplus The surplus amount used for the calculation, as a fixed point number with 18 decimals.\n/// Includes the token of the surplus, the surplus value, the number of decimals\n/// included, and the currency of the surplus.\n/// @custom:member useTotalSurplus If surplus across all of a project's terminals is being used when making redemptions.\n/// @custom:member redemptionRate The redemption rate of the ruleset the redemption is being made during.\n/// @custom:member metadata Extra data provided by the redeemer.\nstruct JBBeforeRedeemRecordedContext {\n address terminal;\n address holder;\n uint256 projectId;\n uint256 rulesetId;\n uint256 redeemCount;\n uint256 totalSupply;\n JBTokenAmount surplus;\n bool useTotalSurplus;\n uint256 redemptionRate;\n bytes metadata;\n}\n" + }, + "src/structs/JBPayHookSpecification.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBPayHook} from \"../interfaces/IJBPayHook.sol\";\n\n/// @notice A pay hook specification sent from the ruleset's data hook back to the terminal. This specification is\n/// fulfilled by the terminal.\n/// @custom:member hook The pay hook to use when fulfilling this specification.\n/// @custom:member amount The amount to send to the hook.\n/// @custom:member metadata Metadata to pass the hook.\nstruct JBPayHookSpecification {\n IJBPayHook hook;\n uint256 amount;\n bytes metadata;\n}\n" + }, + "src/structs/JBRedeemHookSpecification.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBRedeemHook} from \"../interfaces/IJBRedeemHook.sol\";\n\n/// @notice A redeem hook specification sent from the ruleset's data hook back to the terminal. This specification is\n/// fulfilled by the terminal.\n/// @custom:member hook The redeem hook to use when fulfilling this specification.\n/// @custom:member amount The amount to send to the hook.\n/// @custom:member metadata Metadata to pass to the hook.\nstruct JBRedeemHookSpecification {\n IJBRedeemHook hook;\n uint256 amount;\n bytes metadata;\n}\n" + }, + "src/structs/JBRulesetConfig.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBRulesetApprovalHook} from \"../interfaces/IJBRulesetApprovalHook.sol\";\nimport {JBRulesetMetadata} from \"./JBRulesetMetadata.sol\";\nimport {JBSplitGroup} from \"./JBSplitGroup.sol\";\nimport {JBFundAccessLimitGroup} from \"./JBFundAccessLimitGroup.sol\";\n\n/// @custom:member mustStartAtOrAfter The earliest time the ruleset can start.\n/// @custom:member duration The number of seconds the ruleset lasts for, after which a new ruleset will start. A\n/// duration of 0 means that the ruleset will stay active until the project owner explicitly issues a reconfiguration,\n/// at which point a new ruleset will immediately start with the updated properties. If the duration is greater than 0,\n/// a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will apply\n/// to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same properties\n/// but new `start` timestamp and a decayed `weight`.\n/// @custom:member weight A fixed point number with 18 decimals that contracts can use to base arbitrary calculations\n/// on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is\n/// received.\n/// @custom:member decayRate A percent by how much the `weight` of the subsequent ruleset should be reduced, if the\n/// project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have\n/// equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of\n/// `JBConstants.MAX_DECAY_RATE`.\n/// @custom:member approvalHook An address of a contract that says whether a proposed ruleset should be accepted or\n/// rejected. It\n/// can be used to create rules around how a project owner can change ruleset parameters over time.\n/// @custom:member metadata Metadata specifying the controller-specific parameters that a ruleset can have. These\n/// properties cannot change until the next ruleset starts.\n/// @custom:member splitGroups An array of splits to use for any number of groups while the ruleset is active.\n/// @custom:member fundAccessLimitGroups An array of structs which dictate the amount of funds a project can access from\n/// its balance in each payment terminal while the ruleset is active. Amounts are fixed point numbers using the same\n/// number of decimals as the corresponding terminal. The `_payoutLimit` and `_surplusAllowance` parameters must fit in\n/// a `uint232`.\nstruct JBRulesetConfig {\n uint256 mustStartAtOrAfter;\n uint256 duration;\n uint256 weight;\n uint256 decayRate;\n IJBRulesetApprovalHook approvalHook;\n JBRulesetMetadata metadata;\n JBSplitGroup[] splitGroups;\n JBFundAccessLimitGroup[] fundAccessLimitGroups;\n}\n" + }, + "src/structs/JBRulesetMetadata.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @custom:member reservedRate The reserved rate of the ruleset. This number is a percentage calculated out of\n/// `JBConstants.MAX_RESERVED_RATE`.\n/// @custom:member redemptionRate The redemption rate of the ruleset. This number is a percentage calculated out of\n/// `JBConstants.MAX_REDEMPTION_RATE`.\n/// @custom:member baseCurrency The currency on which to base the ruleset's weight.\n/// @custom:member pausePay A flag indicating if the pay functionality should be paused during the ruleset.\n/// @custom:member pauseCreditTransfers A flag indicating if the project token transfer functionality should be paused\n/// during the funding cycle.\n/// @custom:member allowOwnerMinting A flag indicating if the project owner or an operator with the `MINT_TOKENS`\n/// permission from the owner should be allowed to mint project tokens on demand during this ruleset.\n/// @custom:member allowTerminalMigration A flag indicating if migrating terminals should be allowed during this\n/// ruleset.\n/// @custom:member allowSetTerminals A flag indicating if a project's terminals can be added or removed.\n/// @custom:member allowControllerMigration A flag indicating if migrating controllers should be allowed during this\n/// ruleset.\n/// @custom:member allowSetController A flag indicating if a project's controller can be changed.\n/// @custom:member holdFees A flag indicating if fees should be held during this ruleset.\n/// @custom:member useTotalSurplusForRedemptions A flag indicating if redemptions should use the project's balance held\n/// in all terminals instead of the project's local terminal balance from which the redemption is being fulfilled.\n/// @custom:member useDataHookForPay A flag indicating if the data hook should be used for pay transactions during this\n/// ruleset.\n/// @custom:member useDataHookForRedeem A flag indicating if the data hook should be used for redeem transactions during\n/// this ruleset.\n/// @custom:member dataHook The data hook to use during this ruleset.\n/// @custom:member metadata Metadata of the metadata, up to uint8 in size.\nstruct JBRulesetMetadata {\n uint256 reservedRate;\n uint256 redemptionRate;\n uint256 baseCurrency;\n bool pausePay;\n bool pauseCreditTransfers;\n bool allowOwnerMinting;\n bool allowTerminalMigration;\n bool allowSetTerminals;\n bool allowControllerMigration;\n bool allowSetController;\n bool holdFees;\n bool useTotalSurplusForRedemptions;\n bool useDataHookForPay;\n bool useDataHookForRedeem;\n address dataHook;\n uint256 metadata;\n}\n" + }, + "src/structs/JBRulesetWithMetadata.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBRuleset} from \"./JBRuleset.sol\";\nimport {JBRulesetMetadata} from \"./JBRulesetMetadata.sol\";\n\n/// @custom:member ruleset The ruleset.\n/// @custom:member metadata The ruleset's metadata.\nstruct JBRulesetWithMetadata {\n JBRuleset ruleset;\n JBRulesetMetadata metadata;\n}\n" + }, + "src/structs/JBTerminalConfig.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBTerminal} from \"./../interfaces/terminal/IJBTerminal.sol\";\n\n/// @custom:member terminal The terminal to configure.\n/// @custom:member acceptedTokens The tokens to accept from the terminal.\nstruct JBTerminalConfig {\n IJBTerminal terminal;\n address[] tokensToAccept;\n}\n" + }, + "src/JBPrices.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport {mulDiv} from \"@prb/math/src/Common.sol\";\nimport {JBPermissionIds} from \"@bananapus/permission-ids/src/JBPermissionIds.sol\";\nimport {JBPermissioned} from \"./abstract/JBPermissioned.sol\";\nimport {IJBPriceFeed} from \"./interfaces/IJBPriceFeed.sol\";\nimport {IJBProjects} from \"./interfaces/IJBProjects.sol\";\nimport {IJBPermissions} from \"./interfaces/IJBPermissions.sol\";\nimport {IJBPrices} from \"./interfaces/IJBPrices.sol\";\n\n/// @notice Manages and normalizes price feeds. Price feeds are contracts which return the \"pricing currency\" cost of 1\n/// \"unit currency\".\ncontract JBPrices is Ownable, JBPermissioned, IJBPrices {\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n error INVALID_CURRENCY();\n error PRICE_FEED_ALREADY_EXISTS();\n error PRICE_FEED_NOT_FOUND();\n\n //*********************************************************************//\n // ------------------------- public constants ------------------------ //\n //*********************************************************************//\n\n /// @notice The ID to store default values in.\n uint256 public constant override DEFAULT_PROJECT_ID = 0;\n\n //*********************************************************************//\n // ---------------- public immutable stored properties --------------- //\n //*********************************************************************//\n\n /// @notice Mints ERC-721s that represent project ownership and transfers.\n IJBProjects public immutable override PROJECTS;\n\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice The available price feeds.\n /// @dev The feed returns the `pricingCurrency` cost for one unit of the `unitCurrency`.\n /// @custom:param projectId The ID of the project the feed applies to. Feeds stored in ID 0 are used by default for\n /// all projects.\n /// @custom:param pricingCurrency The currency the feed's resulting price is in terms of.\n /// @custom:param unitCurrency The currency being priced by the feed.\n mapping(uint256 projectId => mapping(uint256 pricingCurrency => mapping(uint256 unitCurrency => IJBPriceFeed)))\n public\n override priceFeedFor;\n\n //*********************************************************************//\n // -------------------------- public views --------------------------- //\n //*********************************************************************//\n\n /// @notice Gets the `pricingCurrency` cost for one unit of the `unitCurrency`.\n /// @param projectId The ID of the project to check the feed for. Feeds stored in ID 0 are used by default for all\n /// projects.\n /// @param pricingCurrency The currency the feed's resulting price is in terms of.\n /// @param unitCurrency The currency being priced by the feed.\n /// @param decimals The number of decimals the returned fixed point price should include.\n /// @return The `pricingCurrency` price of 1 `unitCurrency`, as a fixed point number with the specified number of\n /// decimals.\n function pricePerUnitOf(\n uint256 projectId,\n uint256 pricingCurrency,\n uint256 unitCurrency,\n uint256 decimals\n )\n public\n view\n override\n returns (uint256)\n {\n // If the `pricingCurrency` is the `unitCurrency`, return 1 since they have the same price. Include the\n // desired number of decimals.\n if (pricingCurrency == unitCurrency) return 10 ** decimals;\n\n // Get a reference to the price feed.\n IJBPriceFeed feed = priceFeedFor[projectId][pricingCurrency][unitCurrency];\n\n // If the feed exists, return its price.\n if (feed != IJBPriceFeed(address(0))) return feed.currentUnitPrice(decimals);\n\n // Try getting the inverse feed.\n feed = priceFeedFor[projectId][unitCurrency][pricingCurrency];\n\n // If it exists, return the inverse of its price.\n if (feed != IJBPriceFeed(address(0))) {\n return mulDiv(10 ** decimals, 10 ** decimals, feed.currentUnitPrice(decimals));\n }\n\n // Check for a default feed (project ID 0) if not found.\n if (projectId != DEFAULT_PROJECT_ID) {\n return pricePerUnitOf({\n projectId: DEFAULT_PROJECT_ID,\n pricingCurrency: pricingCurrency,\n unitCurrency: unitCurrency,\n decimals: decimals\n });\n }\n\n // No price feed available, revert.\n revert PRICE_FEED_NOT_FOUND();\n }\n\n //*********************************************************************//\n // ---------------------------- constructor -------------------------- //\n //*********************************************************************//\n\n /// @param permissions A contract storing permissions.\n /// @param projects A contract which mints ERC-721s that represent project ownership and transfers.\n /// @param owner The address that will own the contract.\n constructor(\n IJBPermissions permissions,\n IJBProjects projects,\n address owner\n )\n JBPermissioned(permissions)\n Ownable(owner)\n {\n PROJECTS = projects;\n }\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Add a price feed for the `unitCurrency`, priced in terms of the `pricingCurrency`.\n /// @dev Existing feeds can't be modified. Neither can feeds that have already been set as defaults (project ID 0).\n /// @param pricingCurrency The currency the feed's resulting price is in terms of.\n /// @param unitCurrency The currency being priced by the feed.\n /// @param feed The price feed being added.\n function addPriceFeedFor(\n uint256 projectId,\n uint256 pricingCurrency,\n uint256 unitCurrency,\n IJBPriceFeed feed\n )\n external\n override\n {\n // If the message sender is this contract's owner and the `projectId` being set for is the default (0), no\n // permissions necessary.\n // Otherwise, only a project's owner or an operator with the `ADD_PRICE_FEED` permission from that owner can add\n // a feed for a project.\n if (projectId != DEFAULT_PROJECT_ID || msg.sender != owner()) {\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.ADD_PRICE_FEED\n });\n }\n\n // Make sure the currencies aren't 0.\n if (pricingCurrency == 0 || unitCurrency == 0) revert INVALID_CURRENCY();\n\n // Make sure there aren't default feeds for the pair or its inverse.\n if (\n priceFeedFor[DEFAULT_PROJECT_ID][pricingCurrency][unitCurrency] != IJBPriceFeed(address(0))\n || priceFeedFor[DEFAULT_PROJECT_ID][unitCurrency][pricingCurrency] != IJBPriceFeed(address(0))\n ) {\n revert PRICE_FEED_ALREADY_EXISTS();\n }\n\n // Make sure this project doesn't already have feeds for the pair or its inverse.\n if (\n priceFeedFor[projectId][pricingCurrency][unitCurrency] != IJBPriceFeed(address(0))\n || priceFeedFor[projectId][unitCurrency][pricingCurrency] != IJBPriceFeed(address(0))\n ) revert PRICE_FEED_ALREADY_EXISTS();\n\n // Store the feed.\n priceFeedFor[projectId][pricingCurrency][unitCurrency] = feed;\n\n emit AddPriceFeed(projectId, pricingCurrency, unitCurrency, feed);\n }\n}\n" + }, + "src/interfaces/IJBPriceFeed.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IJBPriceFeed {\n function currentUnitPrice(uint256 targetDecimals) external view returns (uint256);\n}\n" + }, + "src/interfaces/IJBPrices.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBPriceFeed} from \"./IJBPriceFeed.sol\";\nimport {IJBProjects} from \"./IJBProjects.sol\";\n\ninterface IJBPrices {\n event AddPriceFeed(\n uint256 indexed projectId, uint256 indexed pricingCurrency, uint256 indexed unitCurrency, IJBPriceFeed feed\n );\n\n function DEFAULT_PROJECT_ID() external view returns (uint256);\n\n function PROJECTS() external view returns (IJBProjects);\n\n function priceFeedFor(\n uint256 projectId,\n uint256 pricingCurrency,\n uint256 unitCurrency\n )\n external\n view\n returns (IJBPriceFeed);\n\n function pricePerUnitOf(\n uint256 projectId,\n uint256 pricingCurrency,\n uint256 unitCurrency,\n uint256 decimals\n )\n external\n view\n returns (uint256);\n\n function addPriceFeedFor(\n uint256 projectId,\n uint256 pricingCurrency,\n uint256 unitCurrency,\n IJBPriceFeed priceFeed\n )\n external;\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant NOT_ENTERED = 1;\n uint256 private constant ENTERED = 2;\n\n uint256 private _status;\n\n /**\n * @dev Unauthorized reentrant call.\n */\n error ReentrancyGuardReentrantCall();\n\n constructor() {\n _status = NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED\n if (_status == ENTERED) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail\n _status = ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = NOT_ENTERED;\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _status == ENTERED;\n }\n}\n" + }, + "src/JBTerminalStore.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {ReentrancyGuard} from \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\nimport {mulDiv} from \"@prb/math/src/Common.sol\";\nimport {IJBController} from \"./interfaces/IJBController.sol\";\nimport {IJBDirectory} from \"./interfaces/IJBDirectory.sol\";\nimport {IJBRulesetDataHook} from \"./interfaces/IJBRulesetDataHook.sol\";\nimport {IJBRulesets} from \"./interfaces/IJBRulesets.sol\";\nimport {IJBPrices} from \"./interfaces/IJBPrices.sol\";\nimport {IJBPrices} from \"./interfaces/IJBPrices.sol\";\nimport {IJBTerminal} from \"./interfaces/terminal/IJBTerminal.sol\";\nimport {IJBTerminalStore} from \"./interfaces/IJBTerminalStore.sol\";\nimport {JBConstants} from \"./libraries/JBConstants.sol\";\nimport {JBFixedPointNumber} from \"./libraries/JBFixedPointNumber.sol\";\nimport {JBCurrencyAmount} from \"./structs/JBCurrencyAmount.sol\";\nimport {JBRulesetMetadataResolver} from \"./libraries/JBRulesetMetadataResolver.sol\";\nimport {JBRuleset} from \"./structs/JBRuleset.sol\";\nimport {JBPayHookSpecification} from \"./structs/JBPayHookSpecification.sol\";\nimport {JBBeforePayRecordedContext} from \"./structs/JBBeforePayRecordedContext.sol\";\nimport {JBBeforeRedeemRecordedContext} from \"./structs/JBBeforeRedeemRecordedContext.sol\";\nimport {JBRedeemHookSpecification} from \"./structs/JBRedeemHookSpecification.sol\";\nimport {JBAccountingContext} from \"./structs/JBAccountingContext.sol\";\nimport {JBTokenAmount} from \"./structs/JBTokenAmount.sol\";\n\n/// @notice Manages all bookkeeping for inflows and outflows of funds from any terminal address.\n/// @dev This contract expects a project's controller to be an `IJBController`.\ncontract JBTerminalStore is ReentrancyGuard, IJBTerminalStore {\n // A library that parses the packed ruleset metadata into a friendlier format.\n using JBRulesetMetadataResolver for JBRuleset;\n\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n error INVALID_AMOUNT_TO_SEND_HOOK();\n error PAYOUT_LIMIT_EXCEEDED();\n error RULESET_PAYMENT_PAUSED();\n error INADEQUATE_CONTROLLER_ALLOWANCE();\n error INADEQUATE_TERMINAL_STORE_BALANCE();\n error INSUFFICIENT_TOKENS();\n error INVALID_RULESET();\n error TERMINAL_MIGRATION_NOT_ALLOWED();\n\n //*********************************************************************//\n // -------------------------- internal constants --------------------- //\n //*********************************************************************//\n\n /// @notice Constrains `mulDiv` operations on fixed point numbers to a maximum number of decimal points of persisted\n /// fidelity.\n uint256 internal constant _MAX_FIXED_POINT_FIDELITY = 18;\n\n //*********************************************************************//\n // ---------------- public immutable stored properties --------------- //\n //*********************************************************************//\n\n /// @notice The directory of terminals and controllers for projects.\n IJBDirectory public immutable override DIRECTORY;\n\n /// @notice The contract storing and managing project rulesets.\n IJBRulesets public immutable override RULESETS;\n\n /// @notice The contract that exposes price feeds.\n IJBPrices public immutable override PRICES;\n\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice A project's balance of a specific token within a terminal.\n /// @dev The balance is represented as a fixed point number with the same amount of decimals as its relative\n /// terminal.\n /// @custom:param terminal The terminal to get the project's balance within.\n /// @custom:param projectId The ID of the project to get the balance of.\n /// @custom:param token The token to get the balance for.\n mapping(address terminal => mapping(uint256 projectId => mapping(address token => uint256))) public override\n balanceOf;\n\n /// @notice The currency-denominated amount of funds that a project has already paid out from its payout limit\n /// during the current ruleset for each terminal, in terms of the payout limit's currency.\n /// @dev Increases as projects pay out funds.\n /// @dev The used payout limit is represented as a fixed point number with the same amount of decimals as the\n /// terminal it applies to.\n /// @custom:param terminal The terminal the payout limit applies to.\n /// @custom:param projectId The ID of the project to get the used payout limit of.\n /// @custom:param token The token the payout limit applies to in the terminal.\n /// @custom:param rulesetCycleNumber The cycle number of the ruleset the payout limit was used during.\n /// @custom:param currency The currency the payout limit is in terms of.\n mapping(\n address terminal\n => mapping(\n uint256 projectId\n => mapping(\n address token => mapping(uint256 rulesetCycleNumber => mapping(uint256 currency => uint256))\n )\n )\n ) public override usedPayoutLimitOf;\n\n /// @notice The currency-denominated amounts of funds that a project has used from its surplus allowance during the\n /// current ruleset for each terminal, in terms of the surplus allowance's currency.\n /// @dev Increases as projects use their allowance.\n /// @dev The used surplus allowance is represented as a fixed point number with the same amount of decimals as the\n /// terminal it applies to.\n /// @custom:param terminal The terminal the surplus allowance applies to.\n /// @custom:param projectId The ID of the project to get the used surplus allowance of.\n /// @custom:param token The token the surplus allowance applies to in the terminal.\n /// @custom:param rulesetId The ID of the ruleset the surplus allowance was used during.\n /// @custom:param currency The currency the surplus allowance is in terms of.\n mapping(\n address terminal\n => mapping(\n uint256 projectId\n => mapping(address token => mapping(uint256 rulesetId => mapping(uint256 currency => uint256)))\n )\n ) public override usedSurplusAllowanceOf;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice Gets the current surplus amount in a terminal for a specified project.\n /// @dev The surplus is the amount of funds a project has in a terminal in excess of its payout limit.\n /// @dev The surplus is represented as a fixed point number with the same amount of decimals as the specified\n /// terminal.\n /// @param terminal The terminal the surplus is being calculated for.\n /// @param projectId The ID of the project to get surplus for.\n /// @param accountingContexts The accounting contexts of tokens whose balances should contribute to the surplus\n /// being calculated.\n /// @param currency The currency the resulting amount should be in terms of.\n /// @param decimals The number of decimals to expect in the resulting fixed point number.\n /// @return The current surplus amount the project has in the specified terminal.\n function currentSurplusOf(\n address terminal,\n uint256 projectId,\n JBAccountingContext[] calldata accountingContexts,\n uint256 decimals,\n uint256 currency\n )\n external\n view\n override\n returns (uint256)\n {\n // Return the surplus during the project's current ruleset.\n return _surplusFrom({\n terminal: terminal,\n projectId: projectId,\n accountingContexts: accountingContexts,\n ruleset: RULESETS.currentOf(projectId),\n targetDecimals: decimals,\n targetCurrency: currency\n });\n }\n\n /// @notice Gets the current surplus amount for a specified project across all terminals.\n /// @param projectId The ID of the project to get the total surplus for.\n /// @param decimals The number of decimals that the fixed point surplus should include.\n /// @param currency The currency that the total surplus should be in terms of.\n /// @return The current total surplus amount that the project has across all terminals.\n function currentTotalSurplusOf(\n uint256 projectId,\n uint256 decimals,\n uint256 currency\n )\n external\n view\n override\n returns (uint256)\n {\n return _currentTotalSurplusOf(projectId, decimals, currency);\n }\n\n /// @notice The surplus amount that can currently be reclaimed from a terminal by redeeming the specified number of\n /// tokens, based on the total token supply and current surplus.\n /// @dev The returned amount in terms of the specified terminal's currency.\n /// @dev The returned amount is represented as a fixed point number with the same amount of decimals as the\n /// specified terminal.\n /// @param terminal The terminal the redeemable amount would come from.\n /// @param projectId The ID of the project to get the redeemable surplus amount for.\n /// @param accountingContexts The accounting contexts of tokens whose balances should contribute to the surplus\n /// being reclaimed from.\n /// @param decimals The number of decimals to include in the resulting fixed point number.\n /// @param currency The currency that the resulting number will be in terms of.\n /// @param tokenCount The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\n /// @param useTotalSurplus A flag indicating whether the surplus used in the calculation should be summed from all\n /// of the project's terminals. If false, surplus should be limited to the amount in the specified `terminal`.\n /// @return The amount of surplus tokens that can be reclaimed by redeeming `tokenCount` tokens as a fixed point\n /// number with the specified number of decimals.\n function currentReclaimableSurplusOf(\n address terminal,\n uint256 projectId,\n JBAccountingContext[] calldata accountingContexts,\n uint256 decimals,\n uint256 currency,\n uint256 tokenCount,\n bool useTotalSurplus\n )\n external\n view\n override\n returns (uint256)\n {\n // Get a reference to the project's current ruleset.\n JBRuleset memory ruleset = RULESETS.currentOf(projectId);\n\n // Get the current surplus amount.\n // Use the project's total surplus across all of its terminals if the flag species specifies so. Otherwise, use\n // the surplus local to the specified terminal.\n uint256 currentSurplus = useTotalSurplus\n ? _currentTotalSurplusOf(projectId, decimals, currency)\n : _surplusFrom(terminal, projectId, accountingContexts, ruleset, decimals, currency);\n\n // If there's no surplus, there's no reclaimable surplus.\n if (currentSurplus == 0) return 0;\n\n // Get the number of outstanding tokens the project has.\n uint256 totalSupply =\n IJBController(address(DIRECTORY.controllerOf(projectId))).totalTokenSupplyWithReservedTokensOf(projectId);\n\n // Can't redeem more tokens that is in the supply.\n if (tokenCount > totalSupply) return 0;\n\n // Return the reclaimable surplus amount.\n return _reclaimableSurplusFrom({\n surplus: currentSurplus,\n tokenCount: tokenCount,\n totalSupply: totalSupply,\n redemptionRate: ruleset.redemptionRate()\n });\n }\n\n /// @notice The current amount of surplus tokens from a terminal that can be reclaimed by redeeming the specified\n /// number of tokens, based on the specified total token supply and surplus amounts.\n /// @param projectId The ID of the project to get the reclaimable surplus amount for.\n /// @param tokenCount The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\n /// @param totalSupply The total number of tokens to make the calculation with, as a fixed point number with 18\n /// decimals.\n /// @param surplus The surplus amount to make the calculation with, as a fixed point number.\n /// @return The surplus token amount that can be reclaimed, as a fixed point number with the same number of decimals\n /// as the provided `surplus`.\n function currentReclaimableSurplusOf(\n uint256 projectId,\n uint256 tokenCount,\n uint256 totalSupply,\n uint256 surplus\n )\n external\n view\n override\n returns (uint256)\n {\n // If there's no surplus, there's no reclaimable surplus.\n if (surplus == 0) return 0;\n\n // Can't redeem more tokens than is in the supply.\n if (tokenCount > totalSupply) return 0;\n\n // Get a reference to the project's current ruleset.\n JBRuleset memory ruleset = RULESETS.currentOf(projectId);\n\n // Return the reclaimable surplus amount.\n return _reclaimableSurplusFrom({\n surplus: surplus,\n tokenCount: tokenCount,\n totalSupply: totalSupply,\n redemptionRate: ruleset.redemptionRate()\n });\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param directory A contract storing directories of terminals and controllers for each project.\n /// @param rulesets A contract storing and managing project rulesets.\n /// @param prices A contract that exposes price feeds.\n constructor(IJBDirectory directory, IJBRulesets rulesets, IJBPrices prices) {\n DIRECTORY = directory;\n RULESETS = rulesets;\n PRICES = prices;\n }\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Records a payment to a project.\n /// @dev Mints the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no\n /// data hook, mints tokens in proportion with the amount paid.\n /// @param payer The address that made the payment to the terminal.\n /// @param amount The amount of tokens being paid. Includes the token being paid, their value, the number of\n /// decimals included, and the currency of the amount.\n /// @param projectId The ID of the project being paid.\n /// @param beneficiary The address that should be the beneficiary of anything the payment yields (including project\n /// tokens minted by the payment).\n /// @param metadata Bytes to send to the data hook, if the project's current ruleset specifies one.\n /// @return ruleset The ruleset the payment was made during, as a `JBRuleset` struct.\n /// @return tokenCount The number of project tokens that were minted, as a fixed point number with 18 decimals.\n /// @return hookSpecifications A list of pay hooks, including data and amounts to send to them. The terminal should\n /// fulfill these specifications.\n function recordPaymentFrom(\n address payer,\n JBTokenAmount calldata amount,\n uint256 projectId,\n address beneficiary,\n bytes calldata metadata\n )\n external\n override\n nonReentrant\n returns (JBRuleset memory ruleset, uint256 tokenCount, JBPayHookSpecification[] memory hookSpecifications)\n {\n // Get a reference to the project's current ruleset.\n ruleset = RULESETS.currentOf(projectId);\n\n // The project must have a ruleset.\n if (ruleset.cycleNumber == 0) revert INVALID_RULESET();\n\n // The ruleset must not have payments paused.\n if (ruleset.pausePay()) revert RULESET_PAYMENT_PAUSED();\n\n // The weight according to which new tokens are to be minted, as a fixed point number with 18 decimals.\n uint256 weight;\n\n // If the ruleset has a data hook enabled for payments, use it to derive a weight and memo.\n if (ruleset.useDataHookForPay() && ruleset.dataHook() != address(0)) {\n // Create the pay context that'll be sent to the data hook.\n JBBeforePayRecordedContext memory context = JBBeforePayRecordedContext({\n terminal: msg.sender,\n payer: payer,\n amount: amount,\n projectId: projectId,\n rulesetId: ruleset.id,\n beneficiary: beneficiary,\n weight: ruleset.weight,\n reservedRate: ruleset.reservedRate(),\n metadata: metadata\n });\n\n (weight, hookSpecifications) = IJBRulesetDataHook(ruleset.dataHook()).beforePayRecordedWith(context);\n }\n // Otherwise use the ruleset's weight\n else {\n weight = ruleset.weight;\n }\n\n // Keep a reference to the amount that should be added to the project's balance.\n uint256 balanceDiff = amount.value;\n\n // Scoped section preventing stack too deep.\n {\n // Keep a reference to the number of hook specifications.\n uint256 numberOfSpecifications = hookSpecifications.length;\n\n // Ensure that the specifications have valid amounts.\n if (numberOfSpecifications != 0) {\n for (uint256 i; i < numberOfSpecifications; i++) {\n // Get a reference to the specification's amount.\n uint256 specifiedAmount = hookSpecifications[i].amount;\n\n // Ensure the amount is non-zero.\n if (specifiedAmount != 0) {\n // Can't send more to hook than was paid.\n if (specifiedAmount > balanceDiff) {\n revert INVALID_AMOUNT_TO_SEND_HOOK();\n }\n\n // Decrement the total amount being added to the local balance.\n balanceDiff = balanceDiff - specifiedAmount;\n }\n }\n }\n }\n\n // If there's no amount being recorded, there's nothing left to do.\n if (amount.value == 0) return (ruleset, 0, hookSpecifications);\n\n // Add the correct balance difference to the token balance of the project.\n if (balanceDiff != 0) {\n balanceOf[msg.sender][projectId][amount.token] =\n balanceOf[msg.sender][projectId][amount.token] + balanceDiff;\n }\n\n // If there's no weight, the token count must be 0, so there's nothing left to do.\n if (weight == 0) return (ruleset, 0, hookSpecifications);\n\n // If the terminal should base its weight on a currency other than the terminal's currency, determine the\n // factor. The weight is always a fixed point mumber with 18 decimals. To ensure this, the ratio should use the\n // same\n // number of decimals as the `amount`.\n uint256 weightRatio = amount.currency == ruleset.baseCurrency()\n ? 10 ** amount.decimals\n : PRICES.pricePerUnitOf({\n projectId: projectId,\n pricingCurrency: amount.currency,\n unitCurrency: ruleset.baseCurrency(),\n decimals: amount.decimals\n });\n\n // Find the number of tokens to mint, as a fixed point number with as many decimals as `weight` has.\n tokenCount = mulDiv(amount.value, weight, weightRatio);\n }\n\n /// @notice Records a redemption from a project.\n /// @dev Redeems the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no\n /// data hook, redeems tokens along a redemption bonding curve that is a function of the number of tokens being\n /// burned.\n /// @param holder The account that is redeeming tokens.\n /// @param projectId The ID of the project being redeemed from.\n /// @param redeemCount The number of project tokens to redeem, as a fixed point number with 18 decimals.\n /// @param accountingContext The accounting context of the token being reclaimed by the redemption.\n /// @param balanceAccountingContexts The accounting contexts of the tokens whose balances should contribute to the\n /// surplus being reclaimed from.\n /// @param metadata Bytes to send to the data hook, if the project's current ruleset specifies one.\n /// @return ruleset The ruleset during the redemption was made during, as a `JBRuleset` struct. This ruleset will\n /// have a redemption rate provided by the redemption hook if applicable.\n /// @return reclaimAmount The amount of tokens reclaimed from the terminal, as a fixed point number with 18\n /// decimals.\n /// @return redemptionRate The redemption rate influencing the reclaim amount.\n /// @return hookSpecifications A list of redeem hooks, including data and amounts to send to them. The terminal\n /// should fulfill these specifications.\n function recordRedemptionFor(\n address holder,\n uint256 projectId,\n uint256 redeemCount,\n JBAccountingContext calldata accountingContext,\n JBAccountingContext[] calldata balanceAccountingContexts,\n bytes memory metadata\n )\n external\n override\n nonReentrant\n returns (\n JBRuleset memory ruleset,\n uint256 reclaimAmount,\n uint256 redemptionRate,\n JBRedeemHookSpecification[] memory hookSpecifications\n )\n {\n // Get a reference to the project's current ruleset.\n ruleset = RULESETS.currentOf(projectId);\n\n // Get the current surplus amount.\n // Use the local surplus if the ruleset specifies that it should be used. Otherwise, use the project's total\n // surplus across all of its terminals.\n uint256 currentSurplus = ruleset.useTotalSurplusForRedemptions()\n ? _currentTotalSurplusOf({\n projectId: projectId,\n decimals: accountingContext.decimals,\n currency: accountingContext.currency\n })\n : _surplusFrom({\n terminal: msg.sender,\n projectId: projectId,\n accountingContexts: balanceAccountingContexts,\n ruleset: ruleset,\n targetDecimals: accountingContext.decimals,\n targetCurrency: accountingContext.currency\n });\n\n // Get the total number of outstanding project tokens.\n uint256 totalSupply =\n IJBController(address(DIRECTORY.controllerOf(projectId))).totalTokenSupplyWithReservedTokensOf(projectId);\n\n // Can't redeem more tokens that are in the supply.\n if (redeemCount > totalSupply) revert INSUFFICIENT_TOKENS();\n\n // If the ruleset has a data hook which is enabled for redemptions, use it to derive a claim amount and memo.\n if (ruleset.useDataHookForRedeem() && ruleset.dataHook() != address(0)) {\n // Create the redeem context that'll be sent to the data hook.\n JBBeforeRedeemRecordedContext memory context = JBBeforeRedeemRecordedContext({\n terminal: msg.sender,\n holder: holder,\n projectId: projectId,\n rulesetId: ruleset.id,\n redeemCount: redeemCount,\n totalSupply: totalSupply,\n surplus: JBTokenAmount({\n token: accountingContext.token,\n value: currentSurplus,\n decimals: accountingContext.decimals,\n currency: accountingContext.currency\n }),\n useTotalSurplus: ruleset.useTotalSurplusForRedemptions(),\n redemptionRate: ruleset.redemptionRate(),\n metadata: metadata\n });\n\n (redemptionRate, redeemCount, totalSupply, hookSpecifications) =\n IJBRulesetDataHook(ruleset.dataHook()).beforeRedeemRecordedWith(context);\n } else {\n redemptionRate = ruleset.redemptionRate();\n }\n\n if (currentSurplus != 0) {\n // Calculate reclaim amount using the current surplus amount.\n reclaimAmount = _reclaimableSurplusFrom({\n surplus: currentSurplus,\n tokenCount: redeemCount,\n totalSupply: totalSupply,\n redemptionRate: redemptionRate\n });\n }\n\n // Keep a reference to the amount that should be subtracted from the project's balance.\n uint256 balanceDiff = reclaimAmount;\n\n // Ensure that the specifications have valid amounts.\n if (hookSpecifications.length != 0) {\n // Keep a reference to the number of redeem hooks specified.\n uint256 numberOfSpecifications = hookSpecifications.length;\n\n // Loop through each specification.\n for (uint256 i; i < numberOfSpecifications; i++) {\n // Get a reference to the specification's amount.\n uint256 specificationAmount = hookSpecifications[i].amount;\n\n // Ensure the amount is non-zero.\n if (specificationAmount != 0) {\n // Increment the total amount being subtracted from the balance.\n balanceDiff = balanceDiff + specificationAmount;\n }\n }\n }\n\n // The amount being reclaimed must be within the project's balance.\n if (balanceDiff > balanceOf[msg.sender][projectId][accountingContext.token]) {\n revert INADEQUATE_TERMINAL_STORE_BALANCE();\n }\n\n // Remove the reclaimed funds from the project's balance.\n if (balanceDiff != 0) {\n unchecked {\n balanceOf[msg.sender][projectId][accountingContext.token] =\n balanceOf[msg.sender][projectId][accountingContext.token] - balanceDiff;\n }\n }\n }\n\n /// @notice Records a payout from a project.\n /// @param projectId The ID of the project that is paying out funds.\n /// @param accountingContext The context of the token being paid out.\n /// @param amount The amount to pay out (use from the payout limit), as a fixed point number.\n /// @param currency The currency of the `amount`. This must match the project's current ruleset's currency.\n /// @return ruleset The ruleset the payout was made during, as a `JBRuleset` struct.\n /// @return amountPaidOut The amount of terminal tokens paid out, as a fixed point number with the same amount of\n /// decimals as its relative terminal.\n function recordPayoutFor(\n uint256 projectId,\n JBAccountingContext calldata accountingContext,\n uint256 amount,\n uint256 currency\n )\n external\n override\n nonReentrant\n returns (JBRuleset memory ruleset, uint256 amountPaidOut)\n {\n // Get a reference to the project's current ruleset.\n ruleset = RULESETS.currentOf(projectId);\n\n // The new total amount which has been paid out during this ruleset.\n uint256 newUsedPayoutLimitOf =\n usedPayoutLimitOf[msg.sender][projectId][accountingContext.token][ruleset.cycleNumber][currency] + amount;\n\n // Amount must be within what is still available to pay out.\n uint256 payoutLimit = IJBController(address(DIRECTORY.controllerOf(projectId))).FUND_ACCESS_LIMITS()\n .payoutLimitOf({\n projectId: projectId,\n rulesetId: ruleset.id,\n terminal: msg.sender,\n token: accountingContext.token,\n currency: currency\n });\n\n // Make sure the new used amount is within the payout limit.\n if (newUsedPayoutLimitOf > payoutLimit || payoutLimit == 0) {\n revert PAYOUT_LIMIT_EXCEEDED();\n }\n\n // Convert the amount to the balance's currency.\n amountPaidOut = (currency == accountingContext.currency)\n ? amount\n : mulDiv(\n amount,\n 10 ** _MAX_FIXED_POINT_FIDELITY, // Use `_MAX_FIXED_POINT_FIDELITY` to keep as much of the `_amount`'s\n // fidelity as possible when converting.\n PRICES.pricePerUnitOf({\n projectId: projectId,\n pricingCurrency: currency,\n unitCurrency: accountingContext.currency,\n decimals: _MAX_FIXED_POINT_FIDELITY\n })\n );\n\n // The amount being paid out must be available.\n if (amountPaidOut > balanceOf[msg.sender][projectId][accountingContext.token]) {\n revert INADEQUATE_TERMINAL_STORE_BALANCE();\n }\n\n // Store the new amount.\n usedPayoutLimitOf[msg.sender][projectId][accountingContext.token][ruleset.cycleNumber][currency] =\n newUsedPayoutLimitOf;\n\n // Removed the paid out funds from the project's token balance.\n unchecked {\n balanceOf[msg.sender][projectId][accountingContext.token] =\n balanceOf[msg.sender][projectId][accountingContext.token] - amountPaidOut;\n }\n }\n\n /// @notice Records a use of a project's surplus allowance.\n /// @dev When surplus allowance is \"used\", it is taken out of the project's surplus within a terminal.\n /// @param projectId The ID of the project to use the surplus allowance of.\n /// @param accountingContext The accounting context of the token whose balances should contribute to the surplus\n /// allowance being reclaimed from.\n /// @param amount The amount to use from the surplus allowance, as a fixed point number.\n /// @param currency The currency of the `amount`. Must match the currency of the surplus allowance.\n /// @return ruleset The ruleset during the surplus allowance is being used during, as a `JBRuleset` struct.\n /// @return usedAmount The amount of terminal tokens used, as a fixed point number with the same amount of decimals\n /// as its relative terminal.\n function recordUsedAllowanceOf(\n uint256 projectId,\n JBAccountingContext calldata accountingContext,\n uint256 amount,\n uint256 currency\n )\n external\n override\n nonReentrant\n returns (JBRuleset memory ruleset, uint256 usedAmount)\n {\n // Get a reference to the project's current ruleset.\n ruleset = RULESETS.currentOf(projectId);\n\n // Get a reference to the new used surplus allowance for this ruleset ID.\n uint256 newUsedSurplusAllowanceOf =\n usedSurplusAllowanceOf[msg.sender][projectId][accountingContext.token][ruleset.id][currency] + amount;\n\n // There must be sufficient surplus allowance available.\n uint256 surplusAllowance = IJBController(address(DIRECTORY.controllerOf(projectId))).FUND_ACCESS_LIMITS()\n .surplusAllowanceOf({\n projectId: projectId,\n rulesetId: ruleset.id,\n terminal: msg.sender,\n token: accountingContext.token,\n currency: currency\n });\n\n // Make sure the new used amount is within the allowance.\n if (newUsedSurplusAllowanceOf > surplusAllowance || surplusAllowance == 0) {\n revert INADEQUATE_CONTROLLER_ALLOWANCE();\n }\n\n // Convert the amount to this store's terminal's token.\n usedAmount = currency == accountingContext.currency\n ? amount\n : mulDiv(\n amount,\n 10 ** _MAX_FIXED_POINT_FIDELITY, // Use `_MAX_FIXED_POINT_FIDELITY` to keep as much of the `amount`'s\n // fidelity as possible when converting.\n PRICES.pricePerUnitOf({\n projectId: projectId,\n pricingCurrency: currency,\n unitCurrency: accountingContext.currency,\n decimals: _MAX_FIXED_POINT_FIDELITY\n })\n );\n\n // Set the token being used as the only one to look for surplus within.\n JBAccountingContext[] memory accountingContexts = new JBAccountingContext[](1);\n accountingContexts[0] = accountingContext;\n\n // The amount being used must be available in the surplus.\n if (\n usedAmount\n > _surplusFrom({\n terminal: msg.sender,\n projectId: projectId,\n accountingContexts: accountingContexts,\n ruleset: ruleset,\n targetDecimals: accountingContext.decimals,\n targetCurrency: accountingContext.currency\n })\n ) revert INADEQUATE_TERMINAL_STORE_BALANCE();\n\n // Store the incremented value.\n usedSurplusAllowanceOf[msg.sender][projectId][accountingContext.token][ruleset.id][currency] =\n newUsedSurplusAllowanceOf;\n\n // Update the project's balance.\n balanceOf[msg.sender][projectId][accountingContext.token] =\n balanceOf[msg.sender][projectId][accountingContext.token] - usedAmount;\n }\n\n /// @notice Records funds being added to a project's balance.\n /// @param projectId The ID of the project which funds are being added to the balance of.\n /// @param token The token being added to the balance.\n /// @param amount The amount of terminal tokens added, as a fixed point number with the same amount of decimals as\n /// its relative terminal.\n function recordAddedBalanceFor(uint256 projectId, address token, uint256 amount) external override {\n // Increment the balance.\n balanceOf[msg.sender][projectId][token] = balanceOf[msg.sender][projectId][token] + amount;\n }\n\n /// @notice Records the migration of funds from this store.\n /// @param projectId The ID of the project being migrated.\n /// @param token The token being migrated.\n /// @return balance The project's current balance (which is being migrated), as a fixed point number with the same\n /// amount of decimals as its relative terminal.\n function recordTerminalMigration(\n uint256 projectId,\n address token\n )\n external\n override\n nonReentrant\n returns (uint256 balance)\n {\n // Get a reference to the project's current ruleset.\n JBRuleset memory ruleset = RULESETS.currentOf(projectId);\n\n // Terminal migration must be allowed.\n if (!ruleset.allowTerminalMigration()) {\n revert TERMINAL_MIGRATION_NOT_ALLOWED();\n }\n\n // Return the current balance, which is the amount being migrated.\n balance = balanceOf[msg.sender][projectId][token];\n\n // Set the balance to 0.\n balanceOf[msg.sender][projectId][token] = 0;\n }\n\n //*********************************************************************//\n // --------------------- internal helper functions ------------------- //\n //*********************************************************************//\n\n /// @notice The amount of surplus which is available for reclaiming via redemption given the number of tokens being\n /// redeemed, the total supply, the current surplus, and the current ruleset.\n /// @param surplus The surplus amount to make the calculation with.\n /// @param tokenCount The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\n /// @param totalSupply The total supply of tokens to make the calculation with, as a fixed point number with 18\n /// decimals.\n /// @param redemptionRate The redemption rate with which the reclaimable surplus is being calculated.\n /// @return The amount of surplus tokens that can be reclaimed.\n function _reclaimableSurplusFrom(\n uint256 surplus,\n uint256 tokenCount,\n uint256 totalSupply,\n uint256 redemptionRate\n )\n internal\n pure\n returns (uint256)\n {\n // If the amount being redeemed is the total supply, return the rest of the surplus.\n if (tokenCount == totalSupply) return surplus;\n\n // If the redemption rate is 0, nothing is claimable.\n if (redemptionRate == 0) return 0;\n\n // Get a reference to the linear proportion.\n uint256 base = mulDiv(surplus, tokenCount, totalSupply);\n\n // These conditions are all part of the same curve. Edge conditions are separated because fewer operation are\n // necessary.\n if (redemptionRate == JBConstants.MAX_REDEMPTION_RATE) {\n return base;\n }\n\n return mulDiv(\n base,\n redemptionRate + mulDiv(tokenCount, JBConstants.MAX_REDEMPTION_RATE - redemptionRate, totalSupply),\n JBConstants.MAX_REDEMPTION_RATE\n );\n }\n\n /// @notice Gets a project's surplus amount in a terminal as measured by a given ruleset, across multiple accounting\n /// contexts.\n /// @dev This amount changes as the value of the balance changes in relation to the currency being used to measure\n /// various payout limits.\n /// @param terminal The terminal the surplus is being calculated for.\n /// @param projectId The ID of the project to get the surplus for.\n /// @param accountingContexts The accounting contexts of tokens whose balances should contribute to the surplus\n /// being calculated.\n /// @param ruleset The ID of the ruleset to base the surplus on.\n /// @param targetDecimals The number of decimals to include in the resulting fixed point number.\n /// @param targetCurrency The currency that the reported surplus is expected to be in terms of.\n /// @return surplus The surplus of funds in terms of `targetCurrency`, as a fixed point number with\n /// `targetDecimals` decimals.\n function _surplusFrom(\n address terminal,\n uint256 projectId,\n JBAccountingContext[] memory accountingContexts,\n JBRuleset memory ruleset,\n uint256 targetDecimals,\n uint256 targetCurrency\n )\n internal\n view\n returns (uint256 surplus)\n {\n // Keep a reference to the number of tokens being iterated on.\n uint256 numberOfTokenAccountingContexts = accountingContexts.length;\n\n // Add payout limits from each token.\n for (uint256 i; i < numberOfTokenAccountingContexts; i++) {\n uint256 tokenSurplus = _tokenSurplusFrom({\n terminal: terminal,\n projectId: projectId,\n accountingContext: accountingContexts[i],\n ruleset: ruleset,\n targetDecimals: targetDecimals,\n targetCurrency: targetCurrency\n });\n // Increment the surplus with any remaining balance.\n if (tokenSurplus > 0) surplus += tokenSurplus;\n }\n }\n\n /// @notice Get a project's surplus amount of a specific token in a given terminal as measured by a given ruleset\n /// (one specific accounting context).\n /// @dev This amount changes as the value of the balance changes in relation to the currency being used to measure\n /// the payout limits.\n /// @param terminal The terminal the surplus is being calculated for.\n /// @param projectId The ID of the project to get the surplus of.\n /// @param accountingContext The accounting context of the token whose balance should contribute to the surplus\n /// being measured.\n /// @param ruleset The ID of the ruleset to base the surplus calculation on.\n /// @param targetDecimals The number of decimals to include in the resulting fixed point number.\n /// @param targetCurrency The currency that the reported surplus is expected to be in terms of.\n /// @return surplus The surplus of funds in terms of `targetCurrency`, as a fixed point number with\n /// `targetDecimals` decimals.\n function _tokenSurplusFrom(\n address terminal,\n uint256 projectId,\n JBAccountingContext memory accountingContext,\n JBRuleset memory ruleset,\n uint256 targetDecimals,\n uint256 targetCurrency\n )\n internal\n view\n returns (uint256 surplus)\n {\n // Keep a reference to the balance.\n surplus = balanceOf[terminal][projectId][accountingContext.token];\n\n // If needed, adjust the decimals of the fixed point number to have the correct decimals.\n surplus = accountingContext.decimals == targetDecimals\n ? surplus\n : JBFixedPointNumber.adjustDecimals({\n value: surplus,\n decimals: accountingContext.decimals,\n targetDecimals: targetDecimals\n });\n\n // Add up all the balances.\n surplus = (surplus == 0 || accountingContext.currency == targetCurrency)\n ? surplus\n : mulDiv(\n surplus,\n 10 ** _MAX_FIXED_POINT_FIDELITY, // Use `_MAX_FIXED_POINT_FIDELITY` to keep as much of the\n // `_payoutLimitRemaining`'s fidelity as possible when converting.\n PRICES.pricePerUnitOf({\n projectId: projectId,\n pricingCurrency: accountingContext.currency,\n unitCurrency: targetCurrency,\n decimals: _MAX_FIXED_POINT_FIDELITY\n })\n );\n\n // Get a reference to the payout limit during the ruleset for the token.\n JBCurrencyAmount[] memory payoutLimits = IJBController(address(DIRECTORY.controllerOf(projectId)))\n .FUND_ACCESS_LIMITS().payoutLimitsOf({\n projectId: projectId,\n rulesetId: ruleset.id,\n terminal: address(terminal),\n token: accountingContext.token\n });\n\n // Keep a reference to the payout limit being iterated on.\n JBCurrencyAmount memory payoutLimit;\n\n // Keep a reference to the number of payout limits being iterated on.\n uint256 numberOfPayoutLimits = payoutLimits.length;\n\n // Loop through each payout limit to determine the cumulative normalized payout limit remaining.\n for (uint256 i; i < numberOfPayoutLimits; i++) {\n payoutLimit = payoutLimits[i];\n\n // Set the payout limit value to the amount still available to pay out during the ruleset.\n payoutLimit.amount = payoutLimit.amount\n - usedPayoutLimitOf[terminal][projectId][accountingContext.token][ruleset.cycleNumber][payoutLimit.currency];\n\n // Adjust the decimals of the fixed point number if needed to have the correct decimals.\n payoutLimit.amount = accountingContext.decimals == targetDecimals\n ? payoutLimit.amount\n : JBFixedPointNumber.adjustDecimals({\n value: payoutLimit.amount,\n decimals: accountingContext.decimals,\n targetDecimals: targetDecimals\n });\n\n // Convert the `payoutLimit`'s amount to be in terms of the provided currency.\n payoutLimit.amount = payoutLimit.amount == 0 || payoutLimit.currency == targetCurrency\n ? payoutLimit.amount\n : mulDiv(\n payoutLimit.amount,\n 10 ** _MAX_FIXED_POINT_FIDELITY, // Use `_MAX_FIXED_POINT_FIDELITY` to keep as much of the\n // `payoutLimitRemaining`'s fidelity as possible when converting.\n PRICES.pricePerUnitOf(projectId, payoutLimit.currency, targetCurrency, _MAX_FIXED_POINT_FIDELITY)\n );\n\n // Decrement from the balance until it reaches zero.\n if (surplus > payoutLimit.amount) {\n surplus -= payoutLimit.amount;\n } else {\n return 0;\n }\n }\n }\n\n /// @notice Gets the total current surplus amount across all of a project's terminals.\n /// @dev This amount changes as the value of the balances changes in relation to the currency being used to measure\n /// the project's payout limits.\n /// @param projectId The ID of the project to get the total surplus for.\n /// @param decimals The number of decimals that the fixed point surplus result should include.\n /// @param currency The currency that the surplus result should be in terms of.\n /// @return surplus The total surplus of a project's funds in terms of `currency`, as a fixed point number with the\n /// specified number of decimals.\n function _currentTotalSurplusOf(\n uint256 projectId,\n uint256 decimals,\n uint256 currency\n )\n internal\n view\n returns (uint256 surplus)\n {\n // Get a reference to the project's terminals.\n IJBTerminal[] memory terminals = DIRECTORY.terminalsOf(projectId);\n\n // Keep a reference to the number of termainls.\n uint256 numberOfTerminals = terminals.length;\n\n // Add the current surplus for each terminal.\n for (uint256 i; i < numberOfTerminals; i++) {\n surplus += terminals[i].currentSurplusOf(projectId, decimals, currency);\n }\n }\n}\n" + }, + "src/interfaces/IJBTerminalStore.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {JBRuleset} from \"./../structs/JBRuleset.sol\";\nimport {JBPayHookSpecification} from \"./../structs/JBPayHookSpecification.sol\";\nimport {JBRedeemHookSpecification} from \"./../structs/JBRedeemHookSpecification.sol\";\nimport {JBAccountingContext} from \"./../structs/JBAccountingContext.sol\";\nimport {JBTokenAmount} from \"./../structs/JBTokenAmount.sol\";\nimport {IJBDirectory} from \"./IJBDirectory.sol\";\nimport {IJBRulesets} from \"./IJBRulesets.sol\";\nimport {IJBPrices} from \"./IJBPrices.sol\";\n\ninterface IJBTerminalStore {\n function RULESETS() external view returns (IJBRulesets);\n\n function DIRECTORY() external view returns (IJBDirectory);\n\n function PRICES() external view returns (IJBPrices);\n\n function balanceOf(address terminal, uint256 projectId, address token) external view returns (uint256);\n\n function usedPayoutLimitOf(\n address terminal,\n uint256 projectId,\n address token,\n uint256 rulesetCycleNumber,\n uint256 currency\n )\n external\n view\n returns (uint256);\n\n function usedSurplusAllowanceOf(\n address terminal,\n uint256 projectId,\n address token,\n uint256 rulesetId,\n uint256 currency\n )\n external\n view\n returns (uint256);\n\n function currentSurplusOf(\n address terminal,\n uint256 projectId,\n JBAccountingContext[] calldata accountingContexts,\n uint256 decimals,\n uint256 currency\n )\n external\n view\n returns (uint256);\n\n function currentTotalSurplusOf(\n uint256 projectId,\n uint256 decimals,\n uint256 currency\n )\n external\n view\n returns (uint256);\n\n function currentReclaimableSurplusOf(\n address terminal,\n uint256 projectId,\n JBAccountingContext[] calldata accountingContexts,\n uint256 _decimals,\n uint256 _currency,\n uint256 tokenCount,\n bool useTotalSurplus\n )\n external\n view\n returns (uint256);\n\n function currentReclaimableSurplusOf(\n uint256 projectId,\n uint256 tokenCount,\n uint256 totalSupply,\n uint256 surplus\n )\n external\n view\n returns (uint256);\n\n function recordPaymentFrom(\n address payer,\n JBTokenAmount memory amount,\n uint256 projectId,\n address beneficiary,\n bytes calldata metadata\n )\n external\n returns (JBRuleset memory ruleset, uint256 tokenCount, JBPayHookSpecification[] memory hookSpecifications);\n\n function recordRedemptionFor(\n address holder,\n uint256 projectId,\n uint256 redeemCount,\n JBAccountingContext calldata accountingContext,\n JBAccountingContext[] calldata balanceAccountingContexts,\n bytes calldata metadata\n )\n external\n returns (\n JBRuleset memory ruleset,\n uint256 reclaimAmount,\n uint256 redemptionRate,\n JBRedeemHookSpecification[] memory hookSpecifications\n );\n\n function recordPayoutFor(\n uint256 projectId,\n JBAccountingContext calldata accountingContext,\n uint256 amount,\n uint256 currency\n )\n external\n returns (JBRuleset memory ruleset, uint256 amountPaidOut);\n\n function recordUsedAllowanceOf(\n uint256 projectId,\n JBAccountingContext calldata accountingContext,\n uint256 amount,\n uint256 currency\n )\n external\n returns (JBRuleset memory ruleset, uint256 withdrawnAmount);\n\n function recordAddedBalanceFor(uint256 projectId, address token, uint256 amount) external;\n\n function recordTerminalMigration(uint256 projectId, address token) external returns (uint256 balance);\n}\n" + }, + "src/libraries/JBFixedPointNumber.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.17;\n\nlibrary JBFixedPointNumber {\n function adjustDecimals(uint256 value, uint256 decimals, uint256 targetDecimals) internal pure returns (uint256) {\n // If decimals need adjusting, multiply or divide the price by the decimal adjuster to get the normalized\n // result.\n if (targetDecimals == decimals) return value;\n else if (targetDecimals > decimals) return value * 10 ** (targetDecimals - decimals);\n else return value / 10 ** (decimals - targetDecimals);\n }\n}\n" + }, + "src/JBFeelessAddresses.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport {ERC165} from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {IJBFeelessAddresses} from \"./interfaces/IJBFeelessAddresses.sol\";\n\n/// @notice Stores and manages addresses that shouldn't incur fees when being paid towards or from.\ncontract JBFeelessAddresses is Ownable, ERC165, IJBFeelessAddresses {\n //*********************************************************************//\n // --------------------- public stored properties -------------------- //\n //*********************************************************************//\n\n /// @notice Feeless addresses for this terminal.\n /// @dev Feeless addresses can receive payouts without incurring a fee.\n /// @dev Feeless addresses can use the surplus allowance without incurring a fee.\n /// @dev Feeless addresses can be the beneficary of redemptions without incurring a fee.\n /// @custom:param addr The address that may or may not be feeless.\n mapping(address addr => bool) public override isFeeless;\n\n //*********************************************************************//\n // -------------------------- public views --------------------------- //\n //*********************************************************************//\n\n /// @notice Indicates if this contract adheres to the specified interface.\n /// @dev See {IERC165-supportsInterface}.\n /// @param interfaceId The ID of the interface to check for adherance to.\n /// @return A flag indicating if the provided interface ID is supported.\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IJBFeelessAddresses).interfaceId || interfaceId == type(IERC165).interfaceId;\n }\n\n /// @param owner The address that will own this contract.\n constructor(address owner) Ownable(owner) {}\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Sets an address as feeless or not feeless for this terminal.\n /// @dev Only the owner of this contract can set addresses as feeless or not feeless.\n /// @dev Feeless addresses can receive payouts without incurring a fee.\n /// @dev Feeless addresses can use the surplus allowance without incurring a fee.\n /// @dev Feeless addresses can be the beneficary of redemptions without incurring a fee.\n /// @param addr The address to make feeless or not feeless.\n /// @param flag A flag indicating whether the `address` should be made feeless or not feeless.\n function setFeelessAddress(address addr, bool flag) external virtual override onlyOwner {\n // Set the flag value.\n isFeeless[addr] = flag;\n\n emit SetFeelessAddress(addr, flag, _msgSender());\n }\n}\n" + }, + "src/interfaces/IJBFeelessAddresses.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IJBFeelessAddresses {\n event SetFeelessAddress(address indexed account, bool indexed isFeeless, address caller);\n\n function isFeeless(address account) external view returns (bool);\n\n function setFeelessAddress(address account, bool flag) external;\n}\n" + }, + "node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface.\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n supportsERC165InterfaceUnchecked(account, type(IERC165).interfaceId) &&\n !supportsERC165InterfaceUnchecked(account, INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && supportsERC165InterfaceUnchecked(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n */\n function getSupportedInterfaces(\n address account,\n bytes4[] memory interfaceIds\n ) internal view returns (bool[] memory) {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = supportsERC165InterfaceUnchecked(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!supportsERC165InterfaceUnchecked(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n *\n * Some precompiled contracts will falsely indicate support for a given interface, so caution\n * should be exercised when using this function.\n *\n * Interface identification is specified in ERC-165.\n */\n function supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool) {\n // prepare call\n bytes memory encodedParams = abi.encodeCall(IERC165.supportsInterface, (interfaceId));\n\n // perform static call\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly {\n success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0x00)\n }\n\n return success && returnSize >= 0x20 && returnValue > 0;\n }\n}\n" + }, + "node_modules/@uniswap/permit2/src/interfaces/IAllowanceTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IEIP712} from \"./IEIP712.sol\";\n\n/// @title AllowanceTransfer\n/// @notice Handles ERC20 token permissions through signature based allowance setting and ERC20 token transfers by checking allowed amounts\n/// @dev Requires user's token approval on the Permit2 contract\ninterface IAllowanceTransfer is IEIP712 {\n /// @notice Thrown when an allowance on a token has expired.\n /// @param deadline The timestamp at which the allowed amount is no longer valid\n error AllowanceExpired(uint256 deadline);\n\n /// @notice Thrown when an allowance on a token has been depleted.\n /// @param amount The maximum amount allowed\n error InsufficientAllowance(uint256 amount);\n\n /// @notice Thrown when too many nonces are invalidated.\n error ExcessiveInvalidation();\n\n /// @notice Emits an event when the owner successfully invalidates an ordered nonce.\n event NonceInvalidation(\n address indexed owner, address indexed token, address indexed spender, uint48 newNonce, uint48 oldNonce\n );\n\n /// @notice Emits an event when the owner successfully sets permissions on a token for the spender.\n event Approval(\n address indexed owner, address indexed token, address indexed spender, uint160 amount, uint48 expiration\n );\n\n /// @notice Emits an event when the owner successfully sets permissions using a permit signature on a token for the spender.\n event Permit(\n address indexed owner,\n address indexed token,\n address indexed spender,\n uint160 amount,\n uint48 expiration,\n uint48 nonce\n );\n\n /// @notice Emits an event when the owner sets the allowance back to 0 with the lockdown function.\n event Lockdown(address indexed owner, address token, address spender);\n\n /// @notice The permit data for a token\n struct PermitDetails {\n // ERC20 token address\n address token;\n // the maximum amount allowed to spend\n uint160 amount;\n // timestamp at which a spender's token allowances become invalid\n uint48 expiration;\n // an incrementing value indexed per owner,token,and spender for each signature\n uint48 nonce;\n }\n\n /// @notice The permit message signed for a single token allowance\n struct PermitSingle {\n // the permit data for a single token alownce\n PermitDetails details;\n // address permissioned on the allowed tokens\n address spender;\n // deadline on the permit signature\n uint256 sigDeadline;\n }\n\n /// @notice The permit message signed for multiple token allowances\n struct PermitBatch {\n // the permit data for multiple token allowances\n PermitDetails[] details;\n // address permissioned on the allowed tokens\n address spender;\n // deadline on the permit signature\n uint256 sigDeadline;\n }\n\n /// @notice The saved permissions\n /// @dev This info is saved per owner, per token, per spender and all signed over in the permit message\n /// @dev Setting amount to type(uint160).max sets an unlimited approval\n struct PackedAllowance {\n // amount allowed\n uint160 amount;\n // permission expiry\n uint48 expiration;\n // an incrementing value indexed per owner,token,and spender for each signature\n uint48 nonce;\n }\n\n /// @notice A token spender pair.\n struct TokenSpenderPair {\n // the token the spender is approved\n address token;\n // the spender address\n address spender;\n }\n\n /// @notice Details for a token transfer.\n struct AllowanceTransferDetails {\n // the owner of the token\n address from;\n // the recipient of the token\n address to;\n // the amount of the token\n uint160 amount;\n // the token to be transferred\n address token;\n }\n\n /// @notice A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.\n /// @notice The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]\n /// @dev The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals.\n function allowance(address user, address token, address spender)\n external\n view\n returns (uint160 amount, uint48 expiration, uint48 nonce);\n\n /// @notice Approves the spender to use up to amount of the specified token up until the expiration\n /// @param token The token to approve\n /// @param spender The spender address to approve\n /// @param amount The approved amount of the token\n /// @param expiration The timestamp at which the approval is no longer valid\n /// @dev The packed allowance also holds a nonce, which will stay unchanged in approve\n /// @dev Setting amount to type(uint160).max sets an unlimited approval\n function approve(address token, address spender, uint160 amount, uint48 expiration) external;\n\n /// @notice Permit a spender to a given amount of the owners token via the owner's EIP-712 signature\n /// @dev May fail if the owner's nonce was invalidated in-flight by invalidateNonce\n /// @param owner The owner of the tokens being approved\n /// @param permitSingle Data signed over by the owner specifying the terms of approval\n /// @param signature The owner's signature over the permit data\n function permit(address owner, PermitSingle memory permitSingle, bytes calldata signature) external;\n\n /// @notice Permit a spender to the signed amounts of the owners tokens via the owner's EIP-712 signature\n /// @dev May fail if the owner's nonce was invalidated in-flight by invalidateNonce\n /// @param owner The owner of the tokens being approved\n /// @param permitBatch Data signed over by the owner specifying the terms of approval\n /// @param signature The owner's signature over the permit data\n function permit(address owner, PermitBatch memory permitBatch, bytes calldata signature) external;\n\n /// @notice Transfer approved tokens from one address to another\n /// @param from The address to transfer from\n /// @param to The address of the recipient\n /// @param amount The amount of the token to transfer\n /// @param token The token address to transfer\n /// @dev Requires the from address to have approved at least the desired amount\n /// of tokens to msg.sender.\n function transferFrom(address from, address to, uint160 amount, address token) external;\n\n /// @notice Transfer approved tokens in a batch\n /// @param transferDetails Array of owners, recipients, amounts, and tokens for the transfers\n /// @dev Requires the from addresses to have approved at least the desired amount\n /// of tokens to msg.sender.\n function transferFrom(AllowanceTransferDetails[] calldata transferDetails) external;\n\n /// @notice Enables performing a \"lockdown\" of the sender's Permit2 identity\n /// by batch revoking approvals\n /// @param approvals Array of approvals to revoke.\n function lockdown(TokenSpenderPair[] calldata approvals) external;\n\n /// @notice Invalidate nonces for a given (token, spender) pair\n /// @param token The token to invalidate nonces for\n /// @param spender The spender to invalidate nonces for\n /// @param newNonce The new nonce to set. Invalidates all nonces less than it.\n /// @dev Can't invalidate more than 2**16 nonces per transaction.\n function invalidateNonces(address token, address spender, uint48 newNonce) external;\n}\n" + }, + "node_modules/@uniswap/permit2/src/interfaces/IEIP712.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IEIP712 {\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n" + }, + "node_modules/@uniswap/permit2/src/interfaces/IPermit2.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {ISignatureTransfer} from \"./ISignatureTransfer.sol\";\nimport {IAllowanceTransfer} from \"./IAllowanceTransfer.sol\";\n\n/// @notice Permit2 handles signature-based transfers in SignatureTransfer and allowance-based transfers in AllowanceTransfer.\n/// @dev Users must approve Permit2 before calling any of the transfer functions.\ninterface IPermit2 is ISignatureTransfer, IAllowanceTransfer {\n// IPermit2 unifies the two interfaces so users have maximal flexibility with their approval.\n}\n" + }, + "node_modules/@uniswap/permit2/src/interfaces/ISignatureTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IEIP712} from \"./IEIP712.sol\";\n\n/// @title SignatureTransfer\n/// @notice Handles ERC20 token transfers through signature based actions\n/// @dev Requires user's token approval on the Permit2 contract\ninterface ISignatureTransfer is IEIP712 {\n /// @notice Thrown when the requested amount for a transfer is larger than the permissioned amount\n /// @param maxAmount The maximum amount a spender can request to transfer\n error InvalidAmount(uint256 maxAmount);\n\n /// @notice Thrown when the number of tokens permissioned to a spender does not match the number of tokens being transferred\n /// @dev If the spender does not need to transfer the number of tokens permitted, the spender can request amount 0 to be transferred\n error LengthMismatch();\n\n /// @notice Emits an event when the owner successfully invalidates an unordered nonce.\n event UnorderedNonceInvalidation(address indexed owner, uint256 word, uint256 mask);\n\n /// @notice The token and amount details for a transfer signed in the permit transfer signature\n struct TokenPermissions {\n // ERC20 token address\n address token;\n // the maximum amount that can be spent\n uint256 amount;\n }\n\n /// @notice The signed permit message for a single token transfer\n struct PermitTransferFrom {\n TokenPermissions permitted;\n // a unique value for every token owner's signature to prevent signature replays\n uint256 nonce;\n // deadline on the permit signature\n uint256 deadline;\n }\n\n /// @notice Specifies the recipient address and amount for batched transfers.\n /// @dev Recipients and amounts correspond to the index of the signed token permissions array.\n /// @dev Reverts if the requested amount is greater than the permitted signed amount.\n struct SignatureTransferDetails {\n // recipient address\n address to;\n // spender requested amount\n uint256 requestedAmount;\n }\n\n /// @notice Used to reconstruct the signed permit message for multiple token transfers\n /// @dev Do not need to pass in spender address as it is required that it is msg.sender\n /// @dev Note that a user still signs over a spender address\n struct PermitBatchTransferFrom {\n // the tokens and corresponding amounts permitted for a transfer\n TokenPermissions[] permitted;\n // a unique value for every token owner's signature to prevent signature replays\n uint256 nonce;\n // deadline on the permit signature\n uint256 deadline;\n }\n\n /// @notice A map from token owner address and a caller specified word index to a bitmap. Used to set bits in the bitmap to prevent against signature replay protection\n /// @dev Uses unordered nonces so that permit messages do not need to be spent in a certain order\n /// @dev The mapping is indexed first by the token owner, then by an index specified in the nonce\n /// @dev It returns a uint256 bitmap\n /// @dev The index, or wordPosition is capped at type(uint248).max\n function nonceBitmap(address, uint256) external view returns (uint256);\n\n /// @notice Transfers a token using a signed permit message\n /// @dev Reverts if the requested amount is greater than the permitted signed amount\n /// @param permit The permit data signed over by the owner\n /// @param owner The owner of the tokens to transfer\n /// @param transferDetails The spender's requested transfer details for the permitted token\n /// @param signature The signature to verify\n function permitTransferFrom(\n PermitTransferFrom memory permit,\n SignatureTransferDetails calldata transferDetails,\n address owner,\n bytes calldata signature\n ) external;\n\n /// @notice Transfers a token using a signed permit message\n /// @notice Includes extra data provided by the caller to verify signature over\n /// @dev The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition\n /// @dev Reverts if the requested amount is greater than the permitted signed amount\n /// @param permit The permit data signed over by the owner\n /// @param owner The owner of the tokens to transfer\n /// @param transferDetails The spender's requested transfer details for the permitted token\n /// @param witness Extra data to include when checking the user signature\n /// @param witnessTypeString The EIP-712 type definition for remaining string stub of the typehash\n /// @param signature The signature to verify\n function permitWitnessTransferFrom(\n PermitTransferFrom memory permit,\n SignatureTransferDetails calldata transferDetails,\n address owner,\n bytes32 witness,\n string calldata witnessTypeString,\n bytes calldata signature\n ) external;\n\n /// @notice Transfers multiple tokens using a signed permit message\n /// @param permit The permit data signed over by the owner\n /// @param owner The owner of the tokens to transfer\n /// @param transferDetails Specifies the recipient and requested amount for the token transfer\n /// @param signature The signature to verify\n function permitTransferFrom(\n PermitBatchTransferFrom memory permit,\n SignatureTransferDetails[] calldata transferDetails,\n address owner,\n bytes calldata signature\n ) external;\n\n /// @notice Transfers multiple tokens using a signed permit message\n /// @dev The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition\n /// @notice Includes extra data provided by the caller to verify signature over\n /// @param permit The permit data signed over by the owner\n /// @param owner The owner of the tokens to transfer\n /// @param transferDetails Specifies the recipient and requested amount for the token transfer\n /// @param witness Extra data to include when checking the user signature\n /// @param witnessTypeString The EIP-712 type definition for remaining string stub of the typehash\n /// @param signature The signature to verify\n function permitWitnessTransferFrom(\n PermitBatchTransferFrom memory permit,\n SignatureTransferDetails[] calldata transferDetails,\n address owner,\n bytes32 witness,\n string calldata witnessTypeString,\n bytes calldata signature\n ) external;\n\n /// @notice Invalidates the bits specified in mask for the bitmap at the word position\n /// @dev The wordPos is maxed at type(uint248).max\n /// @param wordPos A number to index the nonceBitmap at\n /// @param mask A bitmap masked against msg.sender's current bitmap at the word position\n function invalidateUnorderedNonces(uint256 wordPos, uint256 mask) external;\n}\n" + }, + "src/JBMultiTerminal.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.23;\n\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\nimport {Context} from \"@openzeppelin/contracts/utils/Context.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {ERC2771Context} from \"@openzeppelin/contracts/metatx/ERC2771Context.sol\";\nimport {IERC20Metadata} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {ERC165Checker} from \"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\";\nimport {mulDiv} from \"@prb/math/src/Common.sol\";\nimport {IPermit2} from \"@uniswap/permit2/src/interfaces/IPermit2.sol\";\nimport {IAllowanceTransfer} from \"@uniswap/permit2/src/interfaces/IPermit2.sol\";\nimport {JBPermissionIds} from \"@bananapus/permission-ids/src/JBPermissionIds.sol\";\nimport {IJBController} from \"./interfaces/IJBController.sol\";\nimport {IJBDirectory} from \"./interfaces/IJBDirectory.sol\";\nimport {IJBFeelessAddresses} from \"./interfaces/IJBFeelessAddresses.sol\";\nimport {IJBSplits} from \"./interfaces/IJBSplits.sol\";\nimport {IJBPermissioned} from \"./interfaces/IJBPermissioned.sol\";\nimport {IJBPermissions} from \"./interfaces/IJBPermissions.sol\";\nimport {IJBProjects} from \"./interfaces/IJBProjects.sol\";\nimport {IJBTerminalStore} from \"./interfaces/IJBTerminalStore.sol\";\nimport {IJBSplitHook} from \"./interfaces/IJBSplitHook.sol\";\nimport {JBConstants} from \"./libraries/JBConstants.sol\";\nimport {JBFees} from \"./libraries/JBFees.sol\";\nimport {JBRulesetMetadataResolver} from \"./libraries/JBRulesetMetadataResolver.sol\";\nimport {JBMetadataResolver} from \"./libraries/JBMetadataResolver.sol\";\nimport {JBAfterRedeemRecordedContext} from \"./structs/JBAfterRedeemRecordedContext.sol\";\nimport {JBAfterPayRecordedContext} from \"./structs/JBAfterPayRecordedContext.sol\";\nimport {JBFee} from \"./structs/JBFee.sol\";\nimport {JBRuleset} from \"./structs/JBRuleset.sol\";\nimport {JBPayHookSpecification} from \"./structs/JBPayHookSpecification.sol\";\nimport {JBRedeemHookSpecification} from \"./structs/JBRedeemHookSpecification.sol\";\nimport {JBSingleAllowanceContext} from \"./structs/JBSingleAllowanceContext.sol\";\nimport {JBSplit} from \"./structs/JBSplit.sol\";\nimport {JBSplitHookContext} from \"./structs/JBSplitHookContext.sol\";\nimport {JBAccountingContext} from \"./structs/JBAccountingContext.sol\";\nimport {JBTokenAmount} from \"./structs/JBTokenAmount.sol\";\nimport {JBPermissioned} from \"./abstract/JBPermissioned.sol\";\nimport {IJBMultiTerminal} from \"./interfaces/terminal/IJBMultiTerminal.sol\";\nimport {IJBFeeTerminal} from \"./interfaces/terminal/IJBFeeTerminal.sol\";\nimport {IJBTerminal} from \"./interfaces/terminal/IJBTerminal.sol\";\nimport {IJBRedeemTerminal} from \"./interfaces/terminal/IJBRedeemTerminal.sol\";\nimport {IJBPayoutTerminal} from \"./interfaces/terminal/IJBPayoutTerminal.sol\";\nimport {IJBPermitTerminal} from \"./interfaces/terminal/IJBPermitTerminal.sol\";\n\n/// @notice Generic terminal managing inflows and outflows of funds into the protocol ecosystem.\ncontract JBMultiTerminal is JBPermissioned, ERC2771Context, IJBMultiTerminal {\n // A library that parses the packed ruleset metadata into a friendlier format.\n using JBRulesetMetadataResolver for JBRuleset;\n\n // A library that adds default safety checks to ERC20 functionality.\n using SafeERC20 for IERC20;\n\n //*********************************************************************//\n // --------------------------- custom errors ------------------------- //\n //*********************************************************************//\n\n error ACCOUNTING_CONTEXT_ALREADY_SET();\n error INADEQUATE_PAYOUT_AMOUNT();\n error INADEQUATE_RECLAIM_AMOUNT();\n error UNDER_MIN_RETURNED_TOKENS();\n error NO_MSG_VALUE_ALLOWED();\n error OVERFLOW_ALERT();\n error PERMIT_ALLOWANCE_NOT_ENOUGH();\n error TERMINAL_TOKENS_INCOMPATIBLE();\n error TOKEN_NOT_ACCEPTED();\n\n //*********************************************************************//\n // ------------------------- public constants ------------------------ //\n //*********************************************************************//\n\n /// @notice The fee percent (out of `JBConstants.MAX_FEE`).\n /// @dev Fees are charged on payouts to addresses, when the surplus allowance is used, and on redemptions where the\n /// redemption rate is less than 100%.\n uint256 public constant override FEE = 25; // 2.5%\n\n //*********************************************************************//\n // ------------------------ internal constants ----------------------- //\n //*********************************************************************//\n\n /// @notice The ID of the project which receives fees is 1, as it should be the first project launched during the\n /// deployment process.\n uint256 internal constant _FEE_BENEFICIARY_PROJECT_ID = 1;\n\n /// @notice 28 days, the number of seconds a fee can be held for.\n uint256 internal constant _FEE_HOLDING_SECONDS = 2_419_200;\n\n //*********************************************************************//\n // ---------------- public immutable stored properties --------------- //\n //*********************************************************************//\n\n /// @notice Mints ERC-721s that represent project ownership and transfers.\n IJBProjects public immutable override PROJECTS;\n\n /// @notice The directory of terminals and controllers for PROJECTS.\n IJBDirectory public immutable override DIRECTORY;\n\n /// @notice The contract that stores splits for each project.\n IJBSplits public immutable override SPLITS;\n\n /// @notice The contract that stores and manages the terminal's data.\n IJBTerminalStore public immutable override STORE;\n\n /// @notice The contract that stores addresses that shouldn't incur fees when being paid towards or from.\n IJBFeelessAddresses public immutable override FEELESS_ADDRESSES;\n\n /// @notice The permit2 utility.\n IPermit2 public immutable override PERMIT2;\n\n //*********************************************************************//\n // --------------------- internal stored properties ------------------ //\n //*********************************************************************//\n\n /// @notice Context describing how a token is accounted for by a project.\n /// @custom:param projectId The ID of the project that the token accounting context applies to.\n /// @custom:param token The address of the token being accounted for.\n mapping(uint256 projectId => mapping(address token => JBAccountingContext)) internal _accountingContextForTokenOf;\n\n /// @notice A list of tokens accepted by each project.\n /// @custom:param projectId The ID of the project to get a list of accepted tokens for.\n mapping(uint256 projectId => JBAccountingContext[]) internal _accountingContextsOf;\n\n /// @notice Fees that are being held for each project.\n /// @dev Projects can temporarily hold fees and unlock them later by adding funds to the project's balance.\n /// @dev Held fees can be processed at any time by this terminal's owner.\n /// @custom:param projectId The ID of the project that is holding fees.\n /// @custom:param token The token that the fees are held in.\n mapping(uint256 projectId => mapping(address token => JBFee[])) internal _heldFeesOf;\n\n //*********************************************************************//\n // ------------------------- external views -------------------------- //\n //*********************************************************************//\n\n /// @notice A project's accounting context for a token.\n /// @dev See the `JBAccountingContext` struct for more information.\n /// @param projectId The ID of the project to get token accounting context of.\n /// @param token The token to check the accounting context of.\n /// @return The token's accounting context for the token.\n function accountingContextForTokenOf(\n uint256 projectId,\n address token\n )\n external\n view\n override\n returns (JBAccountingContext memory)\n {\n return _accountingContextForTokenOf[projectId][token];\n }\n\n /// @notice The tokens accepted by a project.\n /// @param projectId The ID of the project to get the accepted tokens of.\n /// @return tokenContexts The accounting contexts of the accepted tokens.\n function accountingContextsOf(uint256 projectId) external view override returns (JBAccountingContext[] memory) {\n return _accountingContextsOf[projectId];\n }\n\n /// @notice Gets the total current surplus amount in this terminal for a project, in terms of a given currency.\n /// @dev This total surplus only includes tokens that the project accepts (as returned by\n /// `accountingContextsOf(...)`).\n /// @param projectId The ID of the project to get the current total surplus of.\n /// @param decimals The number of decimals to include in the fixed point returned value.\n /// @param currency The currency to express the returned value in terms of.\n /// @return The current surplus amount the project has in this terminal, in terms of `currency` and with the\n /// specified number of decimals.\n function currentSurplusOf(\n uint256 projectId,\n uint256 decimals,\n uint256 currency\n )\n external\n view\n virtual\n override\n returns (uint256)\n {\n return STORE.currentSurplusOf(address(this), projectId, _accountingContextsOf[projectId], decimals, currency);\n }\n\n /// @notice Fees that are being held for a project.\n /// @dev Projects can temporarily hold fees and unlock them later by adding funds to the project's balance.\n /// @dev Held fees can be processed at any time by this terminal's owner.\n /// @param projectId The ID of the project that is holding fees.\n /// @param token The token that the fees are held in.\n function heldFeesOf(uint256 projectId, address token) external view override returns (JBFee[] memory) {\n return _heldFeesOf[projectId][token];\n }\n\n //*********************************************************************//\n // -------------------------- public views --------------------------- //\n //*********************************************************************//\n\n /// @notice Indicates if this contract adheres to the specified interface.\n /// @dev See {IERC165-supportsInterface}.\n /// @param interfaceId The ID of the interface to check for adherance to.\n /// @return A flag indicating if the provided interface ID is supported.\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IJBMultiTerminal).interfaceId || interfaceId == type(IJBPermissioned).interfaceId\n || interfaceId == type(IJBTerminal).interfaceId || interfaceId == type(IJBRedeemTerminal).interfaceId\n || interfaceId == type(IJBPayoutTerminal).interfaceId || interfaceId == type(IJBPermitTerminal).interfaceId\n || interfaceId == type(IJBMultiTerminal).interfaceId || interfaceId == type(IJBFeeTerminal).interfaceId\n || interfaceId == type(IERC165).interfaceId;\n }\n\n //*********************************************************************//\n // -------------------------- internal views ------------------------- //\n //*********************************************************************//\n\n /// @notice Checks this terminal's balance of a specific token.\n /// @param token The address of the token to get this terminal's balance of.\n /// @return This terminal's balance.\n function _balance(address token) internal view returns (uint256) {\n // If the `token` is native, get the native token balance.\n return token == JBConstants.NATIVE_TOKEN ? address(this).balance : IERC20(token).balanceOf(address(this));\n }\n\n //*********************************************************************//\n // -------------------------- constructor ---------------------------- //\n //*********************************************************************//\n\n /// @param permissions A contract storing permissions.\n /// @param projects A contract which mints ERC-721s that represent project ownership and transfers.\n /// @param directory A contract storing directories of terminals and controllers for each project.\n /// @param splits A contract that stores splits for each project.\n /// @param store A contract that stores the terminal's data.\n /// @param feelessAddresses A contract that stores addresses that shouldn't incur fees when being paid towards or\n /// from.\n /// @param permit2 A permit2 utility.\n constructor(\n IJBPermissions permissions,\n IJBProjects projects,\n IJBDirectory directory,\n IJBSplits splits,\n IJBTerminalStore store,\n IJBFeelessAddresses feelessAddresses,\n IPermit2 permit2,\n address trustedForwarder\n )\n JBPermissioned(permissions)\n ERC2771Context(trustedForwarder)\n {\n PROJECTS = projects;\n DIRECTORY = directory;\n SPLITS = splits;\n STORE = store;\n FEELESS_ADDRESSES = feelessAddresses;\n PERMIT2 = permit2;\n }\n\n //*********************************************************************//\n // ---------------------- external transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Pay a project with tokens.\n /// @param projectId The ID of the project being paid.\n /// @param amount The amount of terminal tokens being received, as a fixed point number with the same number of\n /// decimals as this terminal. If this terminal's token is native, this is ignored and `msg.value` is used in its\n /// place.\n /// @param token The token being paid.\n /// @param beneficiary The address to mint tokens to, and pass along to the ruleset's data hook and pay hook if\n /// applicable.\n /// @param minReturnedTokens The minimum number of project tokens expected in return for this payment, as a fixed\n /// point number with the same number of decimals as this terminal. If the amount of tokens minted for the\n /// beneficiary would be less than this amount, the payment is reverted.\n /// @param memo A memo to pass along to the emitted event.\n /// @param metadata Bytes to pass along to the emitted event, as well as the data hook and pay hook if applicable.\n /// @return beneficiaryTokenCount The number of tokens minted to the beneficiary, as a fixed point number with 18\n /// decimals.\n function pay(\n uint256 projectId,\n address token,\n uint256 amount,\n address beneficiary,\n uint256 minReturnedTokens,\n string calldata memo,\n bytes calldata metadata\n )\n external\n payable\n virtual\n override\n returns (uint256 beneficiaryTokenCount)\n {\n // Pay the project.\n beneficiaryTokenCount = _pay({\n projectId: projectId,\n token: token,\n amount: _acceptFundsFor(projectId, token, amount, metadata),\n payer: _msgSender(),\n beneficiary: beneficiary,\n memo: memo,\n metadata: metadata\n });\n\n // The token count for the beneficiary must be greater than or equal to the specified minimum.\n if (beneficiaryTokenCount < minReturnedTokens) {\n revert UNDER_MIN_RETURNED_TOKENS();\n }\n }\n\n /// @notice Adds funds to a project's balance without minting tokens.\n /// @dev Adding to balance can unlock held fees if `shouldUnlockHeldFees` is true.\n /// @param projectId The ID of the project to add funds to the balance of.\n /// @param amount The amount of tokens to add to the balance, as a fixed point number with the same number of\n /// decimals as this terminal. If this is a native token terminal, this is ignored and `msg.value` is used instead.\n /// @param token The token being added to the balance.\n /// @param shouldReturnHeldFees A flag indicating if held fees should be returned based on the amount being added.\n /// @param memo A memo to pass along to the emitted event.\n /// @param metadata Extra data to pass along to the emitted event.\n function addToBalanceOf(\n uint256 projectId,\n address token,\n uint256 amount,\n bool shouldReturnHeldFees,\n string calldata memo,\n bytes calldata metadata\n )\n external\n payable\n virtual\n override\n {\n // Add to balance.\n _addToBalanceOf({\n projectId: projectId,\n token: token,\n amount: _acceptFundsFor(projectId, token, amount, metadata),\n shouldReturnHeldFees: shouldReturnHeldFees,\n memo: memo,\n metadata: metadata\n });\n }\n\n /// @notice Holders can redeem a project's tokens to reclaim some of that project's surplus tokens, or to trigger\n /// rules determined by the current ruleset's data hook and redeem hook.\n /// @dev Only a token's holder or an operator with the `REDEEM_TOKENS` permission from that holder can redeem those\n /// tokens.\n /// @param holder The account whose tokens are being redeemed.\n /// @param projectId The ID of the project the project tokens belong to.\n /// @param tokenToReclaim The token being reclaimed.\n /// @param redeemCount The number of project tokens to redeem, as a fixed point number with 18 decimals.\n /// @param minTokensReclaimed The minimum number of terminal tokens expected in return, as a fixed point number with\n /// the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less\n /// than this amount, the redemption is reverted.\n /// @param beneficiary The address to send the reclaimed terminal tokens to, and to pass along to the ruleset's\n /// data hook and redeem hook if applicable.\n /// @param metadata Bytes to send along to the emitted event, as well as the data hook and redeem hook if\n /// applicable.\n /// @return reclaimAmount The amount of terminal tokens that the project tokens were redeemed for, as a fixed point\n /// number with 18 decimals.\n function redeemTokensOf(\n address holder,\n uint256 projectId,\n address tokenToReclaim,\n uint256 redeemCount,\n uint256 minTokensReclaimed,\n address payable beneficiary,\n bytes calldata metadata\n )\n external\n virtual\n override\n returns (uint256 reclaimAmount)\n {\n // Enforce permissions.\n _requirePermissionFrom({account: holder, projectId: projectId, permissionId: JBPermissionIds.REDEEM_TOKENS});\n\n reclaimAmount = _redeemTokensOf(holder, projectId, tokenToReclaim, redeemCount, beneficiary, metadata);\n\n // The amount being reclaimed must be at least as much as was expected.\n if (reclaimAmount < minTokensReclaimed) revert INADEQUATE_RECLAIM_AMOUNT();\n }\n\n /// @notice Sends payouts to a project's current payout split group, according to its ruleset, up to its current\n /// payout limit.\n /// @dev If the percentages of the splits in the project's payout split group do not add up to 100%, the remainder\n /// is sent to the project's owner.\n /// @dev Anyone can send payouts on a project's behalf. Projects can include a wildcard split (a split with no\n /// `hook`, `projectId`, or `beneficiary`) to send funds to the `_msgSender()` which calls this function. This can\n /// be used to incentivize calling this function.\n /// @dev payouts sent to addresses which aren't feeless incur the protocol fee.\n /// @dev Payouts a projects don't incur fees if its terminal is feeless.\n /// @param projectId The ID of the project having its payouts sent.\n /// @param token The token being sent.\n /// @param amount The total number of terminal tokens to send, as a fixed point number with same number of decimals\n /// as this terminal.\n /// @param currency The expected currency of the payouts being sent. Must match the currency of one of the\n /// project's current ruleset's payout limits.\n /// @param minTokensPaidOut The minimum number of terminal tokens that the `amount` should be worth (if expressed\n /// in terms of this terminal's currency), as a fixed point number with the same number of decimals as this\n /// terminal. If the amount of tokens paid out would be less than this amount, the send is reverted.\n /// @return amountPaidOut The total amount paid out.\n function sendPayoutsOf(\n uint256 projectId,\n address token,\n uint256 amount,\n uint256 currency,\n uint256 minTokensPaidOut\n )\n external\n virtual\n override\n returns (uint256 amountPaidOut)\n {\n amountPaidOut = _sendPayoutsOf(projectId, token, amount, currency);\n\n // The amount being paid out must be at least as much as was expected.\n if (amountPaidOut < minTokensPaidOut) revert INADEQUATE_PAYOUT_AMOUNT();\n }\n\n /// @notice Allows a project to pay out funds from its surplus up to the current surplus allowance.\n /// @dev Only a project's owner or an operator with the `USE_ALLOWANCE` permission from that owner can use the\n /// surplus allowance.\n /// @dev Incurs the protocol fee unless the caller is a feeless address.\n /// @param projectId The ID of the project to use the surplus allowance of.\n /// @param token The token being paid out from the surplus.\n /// @param amount The amount of terminal tokens to use from the project's current surplus allowance, as a fixed\n /// point number with the same amount of decimals as this terminal.\n /// @param currency The expected currency of the amount being paid out. Must match the currency of one of the\n /// project's current ruleset's surplus allowances.\n /// @param minTokensPaidOut The minimum number of terminal tokens that should be used from the surplus allowance\n /// (including fees), as a fixed point number with 18 decimals. If the amount of surplus used would be less than\n /// this amount, the transaction is reverted.\n /// @param beneficiary The address to send the surplus funds to.\n /// @param memo A memo to pass along to the emitted event.\n /// @return amountPaidOut The number of tokens that were sent to the beneficiary, as a fixed point number with\n /// the same amount of decimals as the terminal.\n function useAllowanceOf(\n uint256 projectId,\n address token,\n uint256 amount,\n uint256 currency,\n uint256 minTokensPaidOut,\n address payable beneficiary,\n string calldata memo\n )\n external\n virtual\n override\n returns (uint256 amountPaidOut)\n {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.USE_ALLOWANCE\n });\n\n amountPaidOut = _useAllowanceOf(projectId, token, amount, currency, beneficiary, memo);\n\n // The amount being withdrawn must be at least as much as was expected.\n if (amountPaidOut < minTokensPaidOut) revert INADEQUATE_PAYOUT_AMOUNT();\n }\n\n /// @notice Migrate a project's funds and operations to a new terminal that accepts the same token type.\n /// @dev Only a project's owner or an operator with the `MIGRATE_TERMINAL` permission from that owner can migrate\n /// the project's terminal.\n /// @param projectId The ID of the project being migrated.\n /// @param token The address of the token being migrated.\n /// @param to The terminal contract being migrated to, which will receive the project's funds and operations.\n /// @return balance The amount of funds that were migrated, as a fixed point number with the same amount of decimals\n /// as this terminal.\n function migrateBalanceOf(\n uint256 projectId,\n address token,\n IJBTerminal to\n )\n external\n virtual\n override\n returns (uint256 balance)\n {\n // Enforce permissions.\n _requirePermissionFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.MIGRATE_TERMINAL\n });\n\n // The terminal being migrated to must accept the same token as this terminal.\n if (to.accountingContextForTokenOf(projectId, token).decimals == 0) {\n revert TERMINAL_TOKENS_INCOMPATIBLE();\n }\n\n // Process any held fees.\n _processHeldFeesOf({projectId: projectId, token: token, forced: true});\n\n // Record the migration in the store.\n balance = STORE.recordTerminalMigration(projectId, token);\n\n // Transfer the balance if needed.\n if (balance != 0) {\n // Trigger any inherited pre-transfer logic.\n _beforeTransferTo({to: address(to), token: token, amount: balance});\n\n // If this terminal's token is the native token, send it in `msg.value`.\n uint256 payValue = token == JBConstants.NATIVE_TOKEN ? balance : 0;\n\n // Withdraw the balance to transfer to the new terminal;\n to.addToBalanceOf{value: payValue}({\n projectId: projectId,\n token: token,\n amount: balance,\n shouldReturnHeldFees: false,\n memo: \"\",\n metadata: bytes(\"\")\n });\n }\n\n emit MigrateTerminal(projectId, token, to, balance, _msgSender());\n }\n\n /// @notice Process any fees that are being held for the project.\n /// @param projectId The ID of the project to process held fees for.\n /// @param token The token to process held fees for.\n function processHeldFeesOf(uint256 projectId, address token) external virtual override {\n _processHeldFeesOf({projectId: projectId, token: token, forced: false});\n }\n\n /// @notice Adds accounting contexts for a project to this terminal so the project can begin accepting the tokens in\n /// those contexts.\n /// @dev Only a project's owner, an operator with the `SET_ACCOUNTING_CONTEXT` permission from that owner, or a\n /// project's controller can add accounting contexts for the project.\n /// @param projectId The ID of the project having to add accounting contexts for.\n /// @param tokens The tokens to add accounting contexts for.\n function addAccountingContextsFor(uint256 projectId, address[] calldata tokens) external override {\n // Enforce permissions.\n _requirePermissionAllowingOverrideFrom({\n account: PROJECTS.ownerOf(projectId),\n projectId: projectId,\n permissionId: JBPermissionIds.SET_ACCOUNTING_CONTEXT,\n alsoGrantAccessIf: _msgSender() == address(DIRECTORY.controllerOf(projectId))\n });\n\n // Keep a reference to the number of accounting contexts to add.\n uint256 numberOfAccountingContexts = tokens.length;\n\n // Keep a reference to the token being iterated on.\n address token;\n\n // Start accepting each token.\n for (uint256 i; i < numberOfAccountingContexts; i++) {\n // Set the accounting context being iterated on.\n token = tokens[i];\n\n // Get a storage reference to the currency accounting context for the token.\n JBAccountingContext storage accountingContext = _accountingContextForTokenOf[projectId][token];\n\n // Make sure the token accounting context isn't already set.\n if (accountingContext.token != address(0)) revert ACCOUNTING_CONTEXT_ALREADY_SET();\n\n // Define the context from the config.\n accountingContext.token = token;\n accountingContext.decimals = token == JBConstants.NATIVE_TOKEN ? 18 : IERC20Metadata(token).decimals();\n accountingContext.currency = uint32(uint160(token)); // Use the last 4 bytes of the address as the currency.\n\n // Add the token to the list of accepted tokens of the project.\n _accountingContextsOf[projectId].push(accountingContext);\n\n emit SetAccountingContext(projectId, token, accountingContext, _msgSender());\n }\n }\n\n /// @notice Process a specified amount of fees for a project.\n /// @dev Only accepts calls from this terminal itself.\n /// @param projectId The ID of the project paying the fee.\n /// @param token The token the fee is being paid in.\n /// @param amount The fee amount, as a fixed point number with 18 decimals.\n /// @param beneficiary The address to mint tokens to (from the project which receives fees), and pass along to the\n /// ruleset's data hook and pay hook if applicable.\n /// @param feeTerminal The terminal that'll receive the fees.\n function executeProcessFee(\n uint256 projectId,\n address token,\n uint256 amount,\n address beneficiary,\n IJBTerminal feeTerminal\n )\n external\n {\n // NOTICE: May only be called by this terminal itself.\n require(msg.sender == address(this));\n\n if (address(feeTerminal) == address(0)) {\n revert(\"404_1\");\n }\n\n // Trigger any inherited pre-transfer logic if funds will be transferred.\n if (address(feeTerminal) != address(this)) {\n _beforeTransferTo({to: address(feeTerminal), token: token, amount: amount});\n }\n\n // Send the projectId in the metadata.\n bytes memory metadata = bytes(abi.encodePacked(projectId));\n\n // Call the internal method of the same terminal is being used.\n if (feeTerminal == IJBTerminal(address(this))) {\n _pay({\n projectId: _FEE_BENEFICIARY_PROJECT_ID,\n token: token,\n amount: amount,\n payer: address(this),\n beneficiary: beneficiary,\n memo: \"\",\n metadata: metadata\n });\n } else {\n // Keep a reference to the amount that'll be paid in.\n uint256 payValue = token == JBConstants.NATIVE_TOKEN ? amount : 0;\n // Send the fee.\n // If this terminal's token is ETH, send it in msg.value.\n // slither-disable-next-line unused-return\n feeTerminal.pay{value: payValue}({\n projectId: _FEE_BENEFICIARY_PROJECT_ID,\n token: token,\n amount: amount,\n beneficiary: beneficiary,\n minReturnedTokens: 0,\n memo: \"\",\n metadata: metadata\n });\n }\n }\n\n /// @notice Executes a payout to a split.\n /// @dev Only accepts calls from this terminal itself.\n /// @param split The split to pay.\n /// @param projectId The ID of the project the split belongs to.\n /// @param token The address of the token being paid to the split.\n /// @param amount The total amount being paid to the split, as a fixed point number with the same number of\n /// decimals as this terminal.\n /// @return netPayoutAmount The amount sent to the split after subtracting fees.\n function executePayout(\n JBSplit calldata split,\n uint256 projectId,\n address token,\n uint256 amount,\n address originalMessageSender\n )\n external\n returns (uint256 netPayoutAmount)\n {\n // NOTICE: May only be called by this terminal itself.\n require(msg.sender == address(this));\n\n // By default, the net payout amount is the full amount. This will be adjusted if fees are taken.\n netPayoutAmount = amount;\n\n // If there's a split hook set, transfer to its `process` function.\n if (split.hook != IJBSplitHook(address(0))) {\n // This payout is eligible for a fee since the funds are leaving this contract and the split hook isn't a\n // feeless address.\n if (!FEELESS_ADDRESSES.isFeeless(address(split.hook))) {\n netPayoutAmount -= JBFees.feeAmountIn(amount, FEE);\n }\n\n // Create the context to send to the split hook.\n JBSplitHookContext memory context = JBSplitHookContext({\n token: token,\n amount: netPayoutAmount,\n decimals: _accountingContextForTokenOf[projectId][token].decimals,\n projectId: projectId,\n groupId: uint256(uint160(token)),\n split: split\n });\n\n // Make sure that the address supports the split hook interface.\n if (ERC165Checker.supportsInterface(address(split.hook), type(IJBSplitHook).interfaceId)) {\n revert(\"400_1\");\n }\n\n // Trigger any inherited pre-transfer logic.\n _beforeTransferTo({to: address(split.hook), token: token, amount: netPayoutAmount});\n\n // Get a reference to the amount being paid in `msg.value`.\n uint256 payValue = token == JBConstants.NATIVE_TOKEN ? netPayoutAmount : 0;\n\n // If this terminal's token is the native token, send it in `msg.value`.\n split.hook.processSplitWith{value: payValue}(context);\n\n // Otherwise, if a project is specified, make a payment to it.\n } else if (split.projectId != 0) {\n // Get a reference to the terminal being used.\n IJBTerminal terminal = DIRECTORY.primaryTerminalOf(split.projectId, token);\n\n // The project must have a terminal to send funds to.\n if (terminal == IJBTerminal(address(0))) revert(\"404_2\");\n\n // This payout is eligible for a fee if the funds are leaving this contract and the receiving terminal isn't\n // a feelss address.\n if (terminal != this && !FEELESS_ADDRESSES.isFeeless(address(terminal))) {\n netPayoutAmount -= JBFees.feeAmountIn(amount, FEE);\n }\n\n // Trigger any inherited pre-transfer logic.\n _beforeTransferTo({to: address(terminal), token: token, amount: netPayoutAmount});\n\n // Send the `projectId` in the metadata as a referral.\n bytes memory metadata = bytes(abi.encodePacked(projectId));\n\n // Add to balance if preferred.\n if (split.preferAddToBalance) {\n // Call the internal method if this terminal is being used.\n if (terminal == IJBTerminal(address(this))) {\n _addToBalanceOf({\n projectId: split.projectId,\n token: token,\n amount: netPayoutAmount,\n shouldReturnHeldFees: false,\n memo: \"\",\n metadata: metadata\n });\n } else {\n // Get a reference to the amount being added to balance through `msg.value`.\n uint256 payValue = token == JBConstants.NATIVE_TOKEN ? netPayoutAmount : 0;\n\n // Add to balance.\n // If this terminal's token is the native token, send it in `msg.value`.\n terminal.addToBalanceOf{value: payValue}({\n projectId: split.projectId,\n token: token,\n amount: netPayoutAmount,\n shouldReturnHeldFees: false,\n memo: \"\",\n metadata: metadata\n });\n }\n } else {\n // Keep a reference to the beneficiary of the payment.\n address beneficiary = split.beneficiary != address(0) ? split.beneficiary : originalMessageSender;\n\n // Call the internal pay method if this terminal is being used.\n if (terminal == IJBTerminal(address(this))) {\n _pay({\n projectId: split.projectId,\n token: token,\n amount: netPayoutAmount,\n payer: address(this),\n beneficiary: beneficiary,\n memo: \"\",\n metadata: metadata\n });\n } else {\n // Keep a reference to the amount being paid through `msg.value`.\n uint256 payValue = token == JBConstants.NATIVE_TOKEN ? netPayoutAmount : 0;\n\n // Make the payment.\n // If this terminal's token is the native token, send it in `msg.value`.\n // slither-disable-next-line unused-return\n terminal.pay{value: payValue}({\n projectId: split.projectId,\n token: token,\n amount: netPayoutAmount,\n beneficiary: beneficiary,\n minReturnedTokens: 0,\n memo: \"\",\n metadata: metadata\n });\n }\n }\n } else {\n // If there's a beneficiary, send the funds directly to the beneficiary.\n // If there isn't a beneficiary, send the funds to the `_msgSender()`.\n address payable recipient =\n split.beneficiary != address(0) ? split.beneficiary : payable(originalMessageSender);\n\n // This payout is eligible for a fee since the funds are leaving this contract and the recipient isn't a\n // feeless address.\n if (!FEELESS_ADDRESSES.isFeeless(recipient)) {\n netPayoutAmount -= JBFees.feeAmountIn(amount, FEE);\n }\n\n // If there's a beneficiary, send the funds directly to the beneficiary. Otherwise send to the\n // `_msgSender()`.\n _transferFrom({from: address(this), to: recipient, token: token, amount: netPayoutAmount});\n }\n }\n\n //*********************************************************************//\n // ---------------------- internal transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Returns the sender, prefered to use over `msg.sender`\n /// @return sender the sender address of this call.\n function _msgSender() internal view override(ERC2771Context, Context) returns (address sender) {\n return ERC2771Context._msgSender();\n }\n\n /// @notice Returns the calldata, prefered to use over `msg.data`\n /// @return calldata the `msg.data` of this call\n function _msgData() internal view override(ERC2771Context, Context) returns (bytes calldata) {\n return ERC2771Context._msgData();\n }\n\n /// @dev ERC-2771 specifies the context as being a single address (20 bytes).\n function _contextSuffixLength() internal view virtual override(ERC2771Context, Context) returns (uint256) {\n return super._contextSuffixLength();\n }\n\n //*********************************************************************//\n // ---------------------- internal transactions ---------------------- //\n //*********************************************************************//\n\n /// @notice Accepts an incoming token.\n /// @param projectId The ID of the project that the transfer is being accepted for.\n /// @param token The token being accepted.\n /// @param amount The number of tokens being accepted.\n /// @param metadata The metadata in which permit2 context is provided.\n /// @return amount The number of tokens which have been accepted.\n function _acceptFundsFor(\n uint256 projectId,\n address token,\n uint256 amount,\n bytes calldata metadata\n )\n internal\n returns (uint256)\n {\n // Make sure the project has an accounting context for the token being paid.\n if (_accountingContextForTokenOf[projectId][token].token == address(0)) {\n revert TOKEN_NOT_ACCEPTED();\n }\n\n // If the terminal's token is the native token, override `amount` with `msg.value`.\n if (token == JBConstants.NATIVE_TOKEN) return msg.value;\n\n // If the terminal's token is not native, revert if there is a non-zero `msg.value`.\n if (msg.value != 0) revert NO_MSG_VALUE_ALLOWED();\n\n // If the terminal is rerouting the tokens within its own functions, there's nothing to transfer.\n if (_msgSender() == address(this)) return amount;\n\n // The metadata ID is the first 4 bytes of this contract's address.\n bytes4 metadataId = bytes4(bytes20(address(this)));\n\n // Unpack the allowance to use, if any, given by the frontend.\n (bool exists, bytes memory parsedMetadata) = JBMetadataResolver.getDataFor(metadataId, metadata);\n\n // Check if the metadata contains permit data.\n if (exists) {\n // Keep a reference to the allowance context parsed from the metadata.\n (JBSingleAllowanceContext memory allowance) = abi.decode(parsedMetadata, (JBSingleAllowanceContext));\n\n // Make sure the permit allowance is enough for this payment. If not we revert early.\n if (allowance.amount < amount) {\n revert PERMIT_ALLOWANCE_NOT_ENOUGH();\n }\n\n // Set the allowance to `spend` tokens for the user.\n PERMIT2.permit({\n owner: _msgSender(),\n permitSingle: IAllowanceTransfer.PermitSingle({\n details: IAllowanceTransfer.PermitDetails({\n token: token,\n amount: allowance.amount,\n expiration: allowance.expiration,\n nonce: allowance.nonce\n }),\n spender: address(this),\n sigDeadline: allowance.sigDeadline\n }),\n signature: allowance.signature\n });\n }\n\n // Get a reference to the balance before receiving tokens.\n uint256 balanceBefore = _balance(token);\n\n // Transfer tokens to this terminal from the msg sender.\n _transferFrom({from: _msgSender(), to: payable(address(this)), token: token, amount: amount});\n\n // The amount should reflect the change in balance.\n return _balance(token) - balanceBefore;\n }\n\n /// @notice Pay a project with tokens.\n /// @param projectId The ID of the project being paid.\n /// @param token The address of the token which the project is being paid with.\n /// @param amount The amount of terminal tokens being received, as a fixed point number with the same number of\n /// decimals as this terminal. If this terminal's token is the native token, `amount` is ignored and `msg.value` is\n /// used in its place.\n /// @param payer The address making the payment.\n /// @param beneficiary The address to mint tokens to, and pass along to the ruleset's data hook and pay hook if\n /// applicable.\n /// @param memo A memo to pass along to the emitted event.\n /// @param metadata Bytes to send along to the emitted event, as well as the data hook and pay hook if applicable.\n /// @return beneficiaryTokenCount The number of tokens minted and sent to the beneficiary, as a fixed point number\n /// with 18 decimals.\n function _pay(\n uint256 projectId,\n address token,\n uint256 amount,\n address payer,\n address beneficiary,\n string memory memo,\n bytes memory metadata\n )\n internal\n returns (uint256 beneficiaryTokenCount)\n {\n // Keep a reference to the ruleset the payment is being made during.\n JBRuleset memory ruleset;\n\n // Keep a reference to the pay hook specifications.\n JBPayHookSpecification[] memory hookSpecifications;\n\n // Keep a reference to the token count that'll be minted as a result of the payment.\n uint256 tokenCount;\n\n // Keep a reference to the token amount to forward to the store.\n JBTokenAmount memory tokenAmount;\n\n // Scoped section prevents stack too deep. `context` only used within scope.\n {\n // Get a reference to the token's accounting context.\n JBAccountingContext memory context = _accountingContextForTokenOf[projectId][token];\n\n // Bundle the amount info into a `JBTokenAmount` struct.\n tokenAmount = JBTokenAmount(token, amount, context.decimals, context.currency);\n }\n\n // Record the payment.\n (ruleset, tokenCount, hookSpecifications) = STORE.recordPaymentFrom({\n payer: payer,\n amount: tokenAmount,\n projectId: projectId,\n beneficiary: beneficiary,\n metadata: metadata\n });\n\n // Mint tokens if needed.\n if (tokenCount != 0) {\n // Set the token count to be the number of tokens minted for the beneficiary instead of the total\n // amount.\n beneficiaryTokenCount = IJBController(address(DIRECTORY.controllerOf(projectId))).mintTokensOf({\n projectId: projectId,\n tokenCount: tokenCount,\n beneficiary: beneficiary,\n memo: \"\",\n useReservedRate: true\n });\n }\n\n // If the data hook returned pay hook specifications, fulfill them.\n if (hookSpecifications.length != 0) {\n _fulfillPayHookSpecificationsFor(\n projectId, hookSpecifications, tokenAmount, payer, ruleset, beneficiary, beneficiaryTokenCount, metadata\n );\n }\n\n emit Pay(\n ruleset.id,\n ruleset.cycleNumber,\n projectId,\n payer,\n beneficiary,\n amount,\n beneficiaryTokenCount,\n memo,\n metadata,\n _msgSender()\n );\n }\n\n /// @notice Adds funds to a project's balance without minting tokens.\n /// @param projectId The ID of the project to add funds to the balance of.\n /// @param token The address of the token being added to the project's balance.\n /// @param amount The amount of tokens to add as a fixed point number with the same number of decimals as this\n /// terminal. If this is a native token terminal, this is ignored and `msg.value` is used instead.\n /// @param shouldReturnHeldFees A flag indicating if held fees should be returned based on the amount being added.\n /// @param memo A memo to pass along to the emitted event.\n /// @param metadata Extra data to pass along to the emitted event.\n function _addToBalanceOf(\n uint256 projectId,\n address token,\n uint256 amount,\n bool shouldReturnHeldFees,\n string memory memo,\n bytes memory metadata\n )\n internal\n {\n // Return held fees if desired. This mechanism means projects don't pay fees multiple times when funds go out of\n // and back into the protocol.\n uint256 returnedFees = shouldReturnHeldFees ? _returnHeldFees(projectId, token, amount) : 0;\n\n // Record the added funds with any returned fees.\n STORE.recordAddedBalanceFor({projectId: projectId, token: token, amount: amount + returnedFees});\n\n emit AddToBalance(projectId, amount, returnedFees, memo, metadata, _msgSender());\n }\n\n /// @notice Holders can redeem their tokens to claim some of a project's surplus, or to trigger rules determined by\n /// the project's current ruleset's data hook.\n /// @dev Only a token holder or a an operator with the `REDEEM_TOKENS` permission from that holder can redeem those\n /// tokens.\n /// @param holder The account redeeming tokens.\n /// @param projectId The ID of the project whose tokens are being redeemed.\n /// @param tokenToReclaim The address of the token which is being reclaimed.\n /// @param redeemCount The number of project tokens to redeem, as a fixed point number with 18 decimals.\n /// @param beneficiary The address to send the reclaimed terminal tokens to.\n /// @param metadata Bytes to send along to the emitted event, as well as the data hook and redeem hook if\n /// applicable.\n /// @return reclaimAmount The number of terminal tokens reclaimed for the `beneficiary`, as a fixed point number\n /// with 18 decimals.\n\n function _redeemTokensOf(\n address holder,\n uint256 projectId,\n address tokenToReclaim,\n uint256 redeemCount,\n address payable beneficiary,\n bytes memory metadata\n )\n internal\n returns (uint256 reclaimAmount)\n {\n // Keep a reference to the ruleset the redemption is being made during.\n JBRuleset memory ruleset;\n\n // Keep a reference to the redeem hook specifications.\n JBRedeemHookSpecification[] memory hookSpecifications;\n\n // Keep a reference to the redemption rate being used.\n uint256 redemptionRate;\n\n // Keep a reference to the accounting context of the token being reclaimed.\n JBAccountingContext memory accountingContext = _accountingContextForTokenOf[projectId][tokenToReclaim];\n\n // Scoped section prevents stack too deep.\n {\n JBAccountingContext[] memory balanceAccountingContexts = _accountingContextsOf[projectId];\n\n // Record the redemption.\n (ruleset, reclaimAmount, redemptionRate, hookSpecifications) = STORE.recordRedemptionFor({\n holder: holder,\n projectId: projectId,\n accountingContext: accountingContext,\n balanceAccountingContexts: balanceAccountingContexts,\n redeemCount: redeemCount,\n metadata: metadata\n });\n }\n\n // Burn the project tokens.\n if (redeemCount != 0) {\n IJBController(address(DIRECTORY.controllerOf(projectId))).burnTokensOf({\n holder: holder,\n projectId: projectId,\n tokenCount: redeemCount,\n memo: \"\"\n });\n }\n\n // Keep a reference to the amount being reclaimed that is subject to fees.\n uint256 amountEligibleForFees;\n\n // Send the reclaimed funds to the beneficiary.\n if (reclaimAmount != 0) {\n // Determine if a fee should be taken. Fees are not exercised if the redemption rate is at its max (100%),\n // if the beneficiary is feeless, or if the fee beneficiary doesn't accept the given token.\n if (!FEELESS_ADDRESSES.isFeeless(beneficiary) && redemptionRate != JBConstants.MAX_REDEMPTION_RATE) {\n amountEligibleForFees += reclaimAmount;\n // Subtract the fee for the reclaimed amount.\n reclaimAmount -= JBFees.feeAmountIn(reclaimAmount, FEE);\n }\n\n // Subtract the fee from the reclaim amount.\n if (reclaimAmount != 0) {\n _transferFrom({from: address(this), to: beneficiary, token: tokenToReclaim, amount: reclaimAmount});\n }\n }\n\n // If the data hook returned redeem hook specifications, fulfill them.\n if (hookSpecifications.length != 0) {\n // Fulfill the redeem hook specifications.\n amountEligibleForFees += _fulfillRedeemHookSpecificationsFor({\n projectId: projectId,\n holder: holder,\n redeemCount: redeemCount,\n ruleset: ruleset,\n redemptionRate: redemptionRate,\n beneficiary: beneficiary,\n beneficiaryReclaimAmount: JBTokenAmount(\n tokenToReclaim, reclaimAmount, accountingContext.decimals, accountingContext.currency\n ),\n specifications: hookSpecifications,\n metadata: metadata\n });\n }\n\n // Take the fee from all outbound reclaimings.\n amountEligibleForFees != 0\n ? _takeFeeFrom({\n projectId: projectId,\n token: tokenToReclaim,\n amount: amountEligibleForFees,\n beneficiary: beneficiary,\n shouldHoldFees: false\n })\n : 0;\n\n emit RedeemTokens(\n ruleset.id,\n ruleset.cycleNumber,\n projectId,\n holder,\n beneficiary,\n redeemCount,\n redemptionRate,\n reclaimAmount,\n metadata,\n _msgSender()\n );\n }\n\n /// @notice Sends payouts to a project's current payout split group, according to its ruleset, up to its current\n /// payout limit.\n /// @dev If the percentages of the splits in the project's payout split group do not add up to 100%, the remainder\n /// is sent to the project's owner.\n /// @dev Anyone can send payouts on a project's behalf. Projects can include a wildcard split (a split with no\n /// `hook`, `projectId`, or `beneficiary`) to send funds to the `_msgSender()` which calls this function. This can\n /// be used to incentivize calling this function.\n /// @dev Payouts sent to addresses which aren't feeless incur the protocol fee.\n /// @param projectId The ID of the project to send the payouts of.\n /// @param token The token being paid out.\n /// @param amount The number of terminal tokens to pay out, as a fixed point number with same number of decimals as\n /// this terminal.\n /// @param currency The expected currency of the amount being paid out. Must match the currency of one of the\n /// project's current ruleset's payout limits.\n /// @return amountPaidOut The total amount that was paid out.\n function _sendPayoutsOf(\n uint256 projectId,\n address token,\n uint256 amount,\n uint256 currency\n )\n internal\n returns (uint256 amountPaidOut)\n {\n // Keep a reference to the ruleset.\n JBRuleset memory ruleset;\n\n // Record the payout.\n (ruleset, amountPaidOut) = STORE.recordPayoutFor({\n projectId: projectId,\n accountingContext: _accountingContextForTokenOf[projectId][token],\n amount: amount,\n currency: currency\n });\n\n // Get a reference to the project's owner.\n // The owner will receive tokens minted by paying the platform fee and receive any leftover funds not sent to\n // payout splits.\n address payable projectOwner = payable(PROJECTS.ownerOf(projectId));\n\n // Send payouts to the splits and get a reference to the amount left over after the splits have been paid.\n // Also get a reference to the amount which was paid out to splits that is eligible for fees.\n (uint256 leftoverPayoutAmount, uint256 amountEligibleForFees) =\n _sendPayoutsToSplitGroupOf(projectId, token, ruleset.id, amountPaidOut);\n\n // Take the fee.\n uint256 feeTaken = _takeFeeFrom({\n projectId: projectId,\n token: token,\n amount: amountEligibleForFees + leftoverPayoutAmount,\n beneficiary: projectOwner,\n shouldHoldFees: ruleset.holdFees()\n });\n\n /// The leftover amount that was sent to the project owner.\n uint256 netLeftoverPayoutAmount;\n\n // Send any leftover funds to the project owner and update the net leftover (which is returned) accordingly.\n if (leftoverPayoutAmount != 0) {\n // Subtract the fee from the net leftover amount.\n netLeftoverPayoutAmount = leftoverPayoutAmount - JBFees.feeAmountIn(leftoverPayoutAmount, FEE);\n\n // Transfer the amount to the project owner.\n _transferFrom({from: address(this), to: projectOwner, token: token, amount: netLeftoverPayoutAmount});\n }\n\n emit SendPayouts(\n ruleset.id,\n ruleset.cycleNumber,\n projectId,\n projectOwner,\n amount,\n amountPaidOut,\n feeTaken,\n netLeftoverPayoutAmount,\n _msgSender()\n );\n }\n\n /// @notice Allows a project to send out funds from its surplus up to the current surplus allowance.\n /// @dev Only a project's owner or an operator with the `USE_ALLOWANCE` permission from that owner can use the\n /// surplus allowance.\n /// @dev Incurs the protocol fee unless the caller is a feeless address.\n /// @param projectId The ID of the project to use the surplus allowance of.\n /// @param token The token being paid out from the surplus.\n /// @param amount The amount of terminal tokens to use from the project's current surplus allowance, as a fixed\n /// point number with the same amount of decimals as this terminal.\n /// @param currency The expected currency of the amount being paid out. Must match the currency of one of the\n /// project's current ruleset's surplus allowances.\n /// @param beneficiary The address to send the funds to.\n /// @param memo A memo to pass along to the emitted event.\n /// @return amountPaidOut The amount of tokens paid out.\n function _useAllowanceOf(\n uint256 projectId,\n address token,\n uint256 amount,\n uint256 currency,\n address payable beneficiary,\n string memory memo\n )\n internal\n returns (uint256 amountPaidOut)\n {\n // Keep a reference to the ruleset.\n JBRuleset memory ruleset;\n\n // Record the use of the allowance.\n (ruleset, amountPaidOut) = STORE.recordUsedAllowanceOf({\n projectId: projectId,\n accountingContext: _accountingContextForTokenOf[projectId][token],\n amount: amount,\n currency: currency\n });\n\n // Take a fee from the `amountPaidOut`, if needed.\n // The net amount is the final amount withdrawn after the fee has been taken.\n uint256 netAmountPaidOut = amountPaidOut\n - (\n FEELESS_ADDRESSES.isFeeless(_msgSender())\n ? 0\n : _takeFeeFrom({\n projectId: projectId,\n token: token,\n amount: amountPaidOut,\n // The project owner will receive tokens minted by paying the platform fee.\n beneficiary: PROJECTS.ownerOf(projectId),\n shouldHoldFees: ruleset.holdFees()\n })\n );\n\n // Transfer any remaining balance to the beneficiary.\n if (netAmountPaidOut != 0) {\n _transferFrom({from: address(this), to: beneficiary, token: token, amount: netAmountPaidOut});\n }\n\n emit UseAllowance(\n ruleset.id,\n ruleset.cycleNumber,\n projectId,\n beneficiary,\n amount,\n amountPaidOut,\n netAmountPaidOut,\n memo,\n _msgSender()\n );\n }\n\n /// @notice Sends payouts to the payout splits group specified in a project's ruleset.\n /// @param projectId The ID of the project to send the payouts of.\n /// @param token The address of the token being paid out.\n /// @param rulesetId The ID of the ruleset of the split group being paid.\n /// @param amount The total amount being paid out, as a fixed point number with the same number of decimals as this\n /// terminal.\n /// @return amount The leftover amount (zero if the splits add up to 100%).\n /// @return amountEligibleForFees The total amount of funds which were paid out and are eligible for fees.\n function _sendPayoutsToSplitGroupOf(\n uint256 projectId,\n address token,\n uint256 rulesetId,\n uint256 amount\n )\n internal\n returns (uint256, uint256 amountEligibleForFees)\n {\n // The total percentage available to split\n uint256 leftoverPercentage = JBConstants.SPLITS_TOTAL_PERCENT;\n\n // Get a reference to the project's payout splits.\n JBSplit[] memory splits = SPLITS.splitsOf(projectId, rulesetId, uint256(uint160(token)));\n\n // Keep a reference to the number of splits being iterated on.\n uint256 numberOfSplits = splits.length;\n\n // Keep a reference to the split being iterated on.\n JBSplit memory split;\n\n // Transfer between all splits.\n for (uint256 i; i < numberOfSplits; i++) {\n // Get a reference to the split being iterated on.\n split = splits[i];\n\n // The amount to send to the split.\n uint256 payoutAmount = mulDiv(amount, split.percent, leftoverPercentage);\n\n // The final payout amount after taking out any fees.\n uint256 netPayoutAmount = _sendPayoutToSplit(split, projectId, token, payoutAmount);\n\n // If the split hook is a feeless address, this payout doesn't incur a fee.\n if (netPayoutAmount != 0 && netPayoutAmount != payoutAmount) {\n amountEligibleForFees += payoutAmount;\n }\n\n if (payoutAmount != 0) {\n // Subtract from the amount to be sent to the beneficiary.\n unchecked {\n amount -= payoutAmount;\n }\n }\n\n unchecked {\n // Decrement the leftover percentage.\n leftoverPercentage -= split.percent;\n }\n\n emit SendPayoutToSplit(\n projectId, rulesetId, uint256(uint160(token)), split, payoutAmount, netPayoutAmount, _msgSender()\n );\n }\n\n return (amount, amountEligibleForFees);\n }\n\n /// @notice Sends a payout to a split.\n /// @param split The split to pay.\n /// @param projectId The ID of the project the split was specified by.\n /// @param token The address of the token being paid out.\n /// @param amount The total amount that the split is being paid, as a fixed point number with the same number of\n /// decimals as this terminal.\n /// @return netPayoutAmount The amount sent to the split after subtracting fees.\n function _sendPayoutToSplit(\n JBSplit memory split,\n uint256 projectId,\n address token,\n uint256 amount\n )\n internal\n returns (uint256)\n {\n // Attempt to distribute this split.\n try this.executePayout(split, projectId, token, amount, _msgSender()) returns (uint256 netPayoutAmount) {\n return netPayoutAmount;\n } catch (bytes memory failureReason) {\n // Add balance back to the project.\n STORE.recordAddedBalanceFor(projectId, token, amount);\n // Emit event.\n emit PayoutReverted(projectId, split, amount, failureReason, _msgSender());\n // Since the payout failed the netPayoutAmount is zero.\n return 0;\n }\n }\n\n /// @notice Fulfills a list of pay hook specifications.\n /// @param projectId The ID of the project being paid.\n /// @param specifications The pay hook specifications to be fulfilled.\n /// @param tokenAmount The amount of tokens that the project was paid.\n /// @param payer The address that sent the payment.\n /// @param ruleset The ruleset the payment is being accepted during.\n /// @param beneficiary The address which will receive any tokens that the payment yields.\n /// @param beneficiaryTokenCount The amount of tokens that are being minted and sent to the beneificary.\n /// @param metadata Bytes to send along to the emitted event and pay hooks as applicable.\n function _fulfillPayHookSpecificationsFor(\n uint256 projectId,\n JBPayHookSpecification[] memory specifications,\n JBTokenAmount memory tokenAmount,\n address payer,\n JBRuleset memory ruleset,\n address beneficiary,\n uint256 beneficiaryTokenCount,\n bytes memory metadata\n )\n internal\n {\n // Keep a reference to payment context for the pay hooks.\n JBAfterPayRecordedContext memory context = JBAfterPayRecordedContext({\n payer: payer,\n projectId: projectId,\n rulesetId: ruleset.id,\n amount: tokenAmount,\n forwardedAmount: tokenAmount,\n weight: ruleset.weight,\n projectTokenCount: beneficiaryTokenCount,\n beneficiary: beneficiary,\n hookMetadata: bytes(\"\"),\n payerMetadata: metadata\n });\n\n // Keep a reference to the number of pay hook specifications to iterate through.\n uint256 numberOfSpecifications = specifications.length;\n\n // Keep a reference to the specification being iterated on.\n JBPayHookSpecification memory specification;\n\n // Fulfill each specification through their pay hooks.\n for (uint256 i; i < numberOfSpecifications; i++) {\n // Set the specification being iterated on.\n specification = specifications[i];\n\n // Pass the correct token `forwardedAmount` to the hook.\n context.forwardedAmount = JBTokenAmount({\n value: specification.amount,\n token: tokenAmount.token,\n decimals: tokenAmount.decimals,\n currency: tokenAmount.currency\n });\n\n // Pass the correct metadata from the data hook's specification.\n context.hookMetadata = specification.metadata;\n\n // Trigger any inherited pre-transfer logic.\n _beforeTransferTo({to: address(specification.hook), token: tokenAmount.token, amount: specification.amount});\n\n // Keep a reference to the amount that'll be paid as a `msg.value`.\n uint256 payValue = tokenAmount.token == JBConstants.NATIVE_TOKEN ? specification.amount : 0;\n\n // Fulfill the specification.\n specification.hook.afterPayRecordedWith{value: payValue}(context);\n\n emit HookAfterRecordPay(specification.hook, context, specification.amount, _msgSender());\n }\n }\n\n /// @notice Fulfills a list of redeem hook specification.\n /// @param projectId The ID of the project being redeemed from.\n /// @param beneficiaryReclaimAmount The number of tokens that are being reclaimed from the project.\n /// @param holder The address that holds the tokens being redeemed.\n /// @param redeemCount The number of tokens being redeemed.\n /// @param metadata Bytes to send along to the emitted event and redeem hooks as applicable.\n /// @param ruleset The ruleset the redemption is being made during as a `JBRuleset` struct.\n /// @param redemptionRate The redemption rate influencing the reclaim amount.\n /// @param beneficiary The address which will receive any terminal tokens that are reclaimed by this redemption.\n /// @param specifications The hook specifications being fulfilled.\n /// @return amountEligibleForFees The amount of funds which were allocated to redeem hooks and are eligible for\n /// fees.\n function _fulfillRedeemHookSpecificationsFor(\n uint256 projectId,\n JBTokenAmount memory beneficiaryReclaimAmount,\n address holder,\n uint256 redeemCount,\n bytes memory metadata,\n JBRuleset memory ruleset,\n uint256 redemptionRate,\n address payable beneficiary,\n JBRedeemHookSpecification[] memory specifications\n )\n internal\n returns (uint256 amountEligibleForFees)\n {\n // Keep a reference to redemption context for the redeem hooks.\n JBAfterRedeemRecordedContext memory context = JBAfterRedeemRecordedContext({\n holder: holder,\n projectId: projectId,\n rulesetId: ruleset.id,\n redeemCount: redeemCount,\n reclaimedAmount: beneficiaryReclaimAmount,\n forwardedAmount: beneficiaryReclaimAmount,\n redemptionRate: redemptionRate,\n beneficiary: beneficiary,\n hookMetadata: \"\",\n redeemerMetadata: metadata\n });\n\n // Keep a reference to the number of redeem hook specifications being iterated through.\n uint256 numberOfSpecifications = specifications.length;\n\n // Keep a reference to the specification being iterated on.\n JBRedeemHookSpecification memory specification;\n\n for (uint256 i; i < numberOfSpecifications; i++) {\n // Set the specification being iterated on.\n specification = specifications[i];\n\n // Get the fee for the specified amount.\n uint256 specificationAmountFee = FEELESS_ADDRESSES.isFeeless(address(specification.hook))\n ? 0\n : JBFees.feeAmountIn(specification.amount, FEE);\n\n // Add the specification's amount to the amount eligible for fees.\n if (specificationAmountFee != 0) {\n amountEligibleForFees += specification.amount;\n specification.amount -= specificationAmountFee;\n }\n\n // Pass the correct token `forwardedAmount` to the hook.\n context.forwardedAmount = JBTokenAmount({\n value: specification.amount,\n token: beneficiaryReclaimAmount.token,\n decimals: beneficiaryReclaimAmount.decimals,\n currency: beneficiaryReclaimAmount.currency\n });\n\n // Pass the correct metadata from the data hook's specification.\n context.hookMetadata = specification.metadata;\n\n // Trigger any inherited pre-transfer logic.\n _beforeTransferTo({\n to: address(specification.hook),\n token: beneficiaryReclaimAmount.token,\n amount: specification.amount\n });\n\n // Keep a reference to the amount that'll be paid as a `msg.value`.\n uint256 payValue = beneficiaryReclaimAmount.token == JBConstants.NATIVE_TOKEN ? specification.amount : 0;\n\n // Fulfill the specification.\n specification.hook.afterRedeemRecordedWith{value: payValue}(context);\n\n emit HookAfterRecordRedeem(\n specification.hook, context, specification.amount, specificationAmountFee, _msgSender()\n );\n }\n }\n\n /// @notice Takes a fee into the platform's project (with the `_FEE_BENEFICIARY_PROJECT_ID`).\n /// @param projectId The ID of the project paying the fee.\n /// @param token The address of the token that the fee is being paid in.\n /// @param amount The fee's token amount, as a fixed point number with 18 decimals.\n /// @param beneficiary The address to mint the platform's project's tokens for.\n /// @param shouldHoldFees If fees should be tracked and held instead of being exercised immediately.\n /// @return feeAmount The amount of the fee taken.\n function _takeFeeFrom(\n uint256 projectId,\n address token,\n uint256 amount,\n address beneficiary,\n bool shouldHoldFees\n )\n internal\n returns (uint256 feeAmount)\n {\n // Get a reference to the fee amount.\n feeAmount = JBFees.feeAmountIn(amount, FEE);\n\n if (shouldHoldFees) {\n // Store the held fee.\n _heldFeesOf[projectId][token].push(\n JBFee({\n amount: amount,\n beneficiary: beneficiary,\n unlockTimestamp: block.timestamp + _FEE_HOLDING_SECONDS\n })\n );\n\n emit HoldFee(projectId, token, amount, FEE, beneficiary, _msgSender());\n } else {\n // Get the terminal that'll receive the fee if one wasn't provided.\n IJBTerminal feeTerminal = DIRECTORY.primaryTerminalOf(_FEE_BENEFICIARY_PROJECT_ID, token);\n\n // Process the fee.\n _processFee({\n projectId: projectId,\n token: token,\n amount: feeAmount,\n beneficiary: beneficiary,\n feeTerminal: feeTerminal,\n wasHeld: false\n });\n }\n }\n\n /// @notice Process any fees that are being held for the project.\n /// @param projectId The ID of the project to process held fees for.\n /// @param token The token to process held fees for.\n /// @param forced If locked held fees should be force processed.\n function _processHeldFeesOf(uint256 projectId, address token, bool forced) internal {\n // Get a reference to the project's held fees.\n JBFee[] memory heldFees = _heldFeesOf[projectId][token];\n\n // Delete the held fees.\n delete _heldFeesOf[projectId][token];\n\n // Keep a reference to the number of held fees.\n uint256 numberOfHeldFees = heldFees.length;\n\n // Keep a reference to the fee being iterated on.\n JBFee memory heldFee;\n\n // Keep a reference to the terminal that'll receive the fees.\n IJBTerminal feeTerminal = DIRECTORY.primaryTerminalOf(_FEE_BENEFICIARY_PROJECT_ID, token);\n\n // Process each fee.\n for (uint256 i; i < numberOfHeldFees; i++) {\n // Keep a reference to the held fee being iterated on.\n heldFee = heldFees[i];\n\n // Can't process fees that aren't yet unlocked.\n if (!forced && heldFee.unlockTimestamp > block.timestamp) {\n // Add the fee back to storage.\n _heldFeesOf[projectId][token].push(heldFee);\n continue;\n }\n\n // Process the fee.\n _processFee({\n projectId: projectId,\n token: token,\n amount: heldFee.amount,\n beneficiary: heldFee.beneficiary,\n feeTerminal: feeTerminal,\n wasHeld: true\n });\n }\n }\n\n /// @notice Process a fee of the specified amount from a project.\n /// @param projectId The ID of the project paying the fee.\n /// @param token The token the fee is being paid in.\n /// @param amount The fee amount, as a fixed point number with 18 decimals.\n /// @param beneficiary The address which will receive any platform tokens minted.\n /// @param feeTerminal The terminal that'll receive the fee.\n /// @param wasHeld A flag indicating if the fee being processed was being held by this terminal.\n function _processFee(\n uint256 projectId,\n address token,\n uint256 amount,\n address beneficiary,\n IJBTerminal feeTerminal,\n bool wasHeld\n )\n internal\n {\n // slither-disable-start reentrancy-no-eth\n try this.executeProcessFee(projectId, token, amount, beneficiary, feeTerminal) {\n emit ProcessFee(projectId, token, amount, wasHeld, beneficiary, _msgSender());\n } catch (bytes memory reason) {\n STORE.recordAddedBalanceFor(projectId, token, amount);\n\n emit FeeReverted(projectId, token, _FEE_BENEFICIARY_PROJECT_ID, amount, reason, _msgSender());\n }\n // slither-disable-end reentrancy-no-eth\n }\n\n /// @notice Returns held fees to the project who paid them based on the specified amount.\n /// @param projectId The project held fees are being returned to.\n /// @param token The token that the held fees are in.\n /// @param amount The amount to base the calculation on, as a fixed point number with the same number of decimals\n /// as this terminal.\n /// @return returnedFees The amount of held fees that were returned, as a fixed point number with the same number of\n /// decimals as this terminal\n function _returnHeldFees(\n uint256 projectId,\n address token,\n uint256 amount\n )\n internal\n returns (uint256 returnedFees)\n {\n // Get a reference to the project's held fees.\n JBFee[] memory heldFees = _heldFeesOf[projectId][token];\n\n // Delete the current held fees.\n delete _heldFeesOf[projectId][token];\n\n // Get a reference to the leftover amount once all fees have been settled.\n uint256 leftoverAmount = amount;\n\n // Keep a reference to the number of held fees.\n uint256 numberOfHeldFees = heldFees.length;\n\n // Keep a reference to the fee being iterated on.\n JBFee memory heldFee;\n\n // Process each fee.\n for (uint256 i; i < numberOfHeldFees; i++) {\n // Save the fee being iterated on.\n heldFee = heldFees[i];\n\n // slither-disable-next-line incorrect-equality\n if (leftoverAmount == 0) {\n _heldFeesOf[projectId][token].push(heldFee);\n } else {\n // Notice here we take `feeAmountIn` on the stored `.amount`.\n uint256 feeAmount = JBFees.feeAmountIn(heldFee.amount, FEE);\n\n // Keep a reference to the amount from which the fee was taken.\n uint256 amountFromFee = heldFee.amount - feeAmount;\n\n if (leftoverAmount >= amountFromFee) {\n unchecked {\n leftoverAmount = leftoverAmount - amountFromFee;\n returnedFees += feeAmount;\n }\n } else {\n // And here we overwrite with `feeAmountFrom` the `leftoverAmount`\n feeAmount = JBFees.feeAmountFrom(leftoverAmount, FEE);\n\n unchecked {\n _heldFeesOf[projectId][token].push(\n JBFee({\n amount: amountFromFee - leftoverAmount,\n beneficiary: heldFee.beneficiary,\n unlockTimestamp: heldFee.unlockTimestamp\n })\n );\n returnedFees += feeAmount;\n }\n leftoverAmount = 0;\n }\n }\n }\n\n emit ReturnHeldFees(projectId, token, amount, returnedFees, leftoverAmount, _msgSender());\n }\n\n /// @notice Transfers tokens.\n /// @param from The address the transfer should originate from.\n /// @param to The address the transfer should go to.\n /// @param token The token being transfered.\n /// @param amount The number of tokens being transferred, as a fixed point number with the same number of decimals\n /// as this terminal.\n function _transferFrom(address from, address payable to, address token, uint256 amount) internal {\n // If the token is the native token, transfer natively.\n if (token == JBConstants.NATIVE_TOKEN) return Address.sendValue(to, amount);\n\n if (from == address(this)) return IERC20(token).safeTransfer(to, amount);\n\n // If there's sufficient approval, transfer normally.\n if (IERC20(token).allowance(address(from), address(this)) >= amount) {\n return IERC20(token).safeTransferFrom(from, to, amount);\n }\n\n // Make sure the amount being paid is less than the maximum permit2 allowance.\n if (amount > type(uint160).max) revert OVERFLOW_ALERT();\n\n // Otherwise we attempt to use the PERMIT2 method.\n PERMIT2.transferFrom(from, to, uint160(amount), token);\n }\n\n /// @notice Logic to be triggered before transferring tokens from this terminal.\n /// @param to The address the transfer is going to.\n /// @param token The token being transferred.\n /// @param amount The number of tokens being transferred, as a fixed point number with the same number of decimals\n /// as this terminal.\n function _beforeTransferTo(address to, address token, uint256 amount) internal {\n // If the token is the native token, no allowance needed.\n if (token == JBConstants.NATIVE_TOKEN) return;\n IERC20(token).safeIncreaseAllowance(to, amount);\n }\n}\n" + }, + "src/interfaces/terminal/IJBFeeTerminal.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBTerminal} from \"./IJBTerminal.sol\";\nimport {IJBFeelessAddresses} from \"./../IJBFeelessAddresses.sol\";\nimport {JBFee} from \"../../structs/JBFee.sol\";\n\n/// @notice A terminal that can process and hold fees.\ninterface IJBFeeTerminal is IJBTerminal {\n event HoldFee(\n uint256 indexed projectId,\n address indexed token,\n uint256 indexed amount,\n uint256 fee,\n address beneficiary,\n address caller\n );\n\n event ProcessFee(\n uint256 indexed projectId,\n address indexed token,\n uint256 indexed amount,\n bool wasHeld,\n address beneficiary,\n address caller\n );\n\n event ReturnHeldFees(\n uint256 indexed projectId,\n address indexed token,\n uint256 indexed amount,\n uint256 returnedFees,\n uint256 leftoverAmount,\n address caller\n );\n\n event FeeReverted(\n uint256 indexed projectId,\n address indexed token,\n uint256 indexed feeProjectId,\n uint256 amount,\n bytes reason,\n address caller\n );\n\n function FEE() external view returns (uint256);\n\n function FEELESS_ADDRESSES() external view returns (IJBFeelessAddresses);\n\n function heldFeesOf(uint256 projectId, address token) external view returns (JBFee[] memory);\n\n function processHeldFeesOf(uint256 projectId, address token) external;\n}\n" + }, + "src/interfaces/terminal/IJBMultiTerminal.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBProjects} from \"../IJBProjects.sol\";\nimport {IJBDirectory} from \"../IJBDirectory.sol\";\nimport {IJBTerminalStore} from \"../IJBTerminalStore.sol\";\n\nimport {IJBRedeemTerminal} from \"./IJBRedeemTerminal.sol\";\nimport {IJBPayoutTerminal} from \"./IJBPayoutTerminal.sol\";\nimport {IJBTerminal} from \"./IJBTerminal.sol\";\nimport {IJBFeeTerminal} from \"./IJBFeeTerminal.sol\";\nimport {IJBPermitTerminal} from \"./IJBPermitTerminal.sol\";\nimport {IJBSplits} from \"../IJBSplits.sol\";\n\ninterface IJBMultiTerminal is IJBTerminal, IJBFeeTerminal, IJBRedeemTerminal, IJBPayoutTerminal, IJBPermitTerminal {\n function STORE() external view returns (IJBTerminalStore);\n\n function PROJECTS() external view returns (IJBProjects);\n\n function DIRECTORY() external view returns (IJBDirectory);\n\n function SPLITS() external view returns (IJBSplits);\n}\n" + }, + "src/interfaces/terminal/IJBPayoutTerminal.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBTerminal} from \"./IJBTerminal.sol\";\nimport {JBSplit} from \"../../structs/JBSplit.sol\";\nimport {IJBSplits} from \"../IJBSplits.sol\";\n\n/// @notice A terminal that can send payouts.\ninterface IJBPayoutTerminal is IJBTerminal {\n event SendPayouts(\n uint256 indexed rulesetId,\n uint256 indexed rulesetCycleNumber,\n uint256 indexed projectId,\n address beneficiary,\n uint256 amount,\n uint256 amountPaidOut,\n uint256 fee,\n uint256 beneficiaryDistributionAmount,\n address caller\n );\n\n event SendPayoutToSplit(\n uint256 indexed projectId,\n uint256 indexed rulesetId,\n uint256 indexed group,\n JBSplit split,\n uint256 amount,\n uint256 netAmount,\n address caller\n );\n\n event UseAllowance(\n uint256 indexed rulesetId,\n uint256 indexed rulesetCycleNumber,\n uint256 indexed projectId,\n address beneficiary,\n uint256 amount,\n uint256 amountPaidOut,\n uint256 netAmountPaidOut,\n string memo,\n address caller\n );\n\n event PayoutReverted(uint256 indexed projectId, JBSplit split, uint256 amount, bytes reason, address caller);\n\n function sendPayoutsOf(\n uint256 projectId,\n address token,\n uint256 amount,\n uint256 currency,\n uint256 minTokensPaidOut\n )\n external\n returns (uint256 netLeftoverPayoutAmount);\n\n function useAllowanceOf(\n uint256 projectId,\n address token,\n uint256 amount,\n uint256 currency,\n uint256 minTokensPaidOut,\n address payable beneficiary,\n string calldata memo\n )\n external\n returns (uint256 netAmountPaidOut);\n}\n" + }, + "src/interfaces/terminal/IJBPermitTerminal.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBTerminal} from \"./IJBTerminal.sol\";\nimport {IPermit2} from \"@uniswap/permit2/src/interfaces/IPermit2.sol\";\n\ninterface IJBPermitTerminal is IJBTerminal {\n function PERMIT2() external returns (IPermit2);\n}\n" + }, + "src/interfaces/terminal/IJBRedeemTerminal.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IJBTerminal} from \"./IJBTerminal.sol\";\nimport {IJBRedeemHook} from \"../IJBRedeemHook.sol\";\nimport {JBAfterRedeemRecordedContext} from \"../../structs/JBAfterRedeemRecordedContext.sol\";\n\n/// @notice A terminal that can be redeemed from.\ninterface IJBRedeemTerminal is IJBTerminal {\n event RedeemTokens(\n uint256 indexed rulesetId,\n uint256 indexed rulesetCycleNumber,\n uint256 indexed projectId,\n address holder,\n address beneficiary,\n uint256 tokenCount,\n uint256 redemptionRate,\n uint256 reclaimedAmount,\n bytes metadata,\n address caller\n );\n\n event HookAfterRecordRedeem(\n IJBRedeemHook indexed hook,\n JBAfterRedeemRecordedContext context,\n uint256 specificationAmount,\n uint256 fee,\n address caller\n );\n\n function redeemTokensOf(\n address holder,\n uint256 projectId,\n address tokenToReclaim,\n uint256 redeemCount,\n uint256 minTokensReclaimed,\n address payable beneficiary,\n bytes calldata metadata\n )\n external\n returns (uint256 reclaimAmount);\n}\n" + }, + "src/libraries/JBFees.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.17;\n\nimport {mulDiv} from \"@prb/math/src/Common.sol\";\nimport {JBConstants} from \"./../libraries/JBConstants.sol\";\n\n/// @notice Fee calculations.\nlibrary JBFees {\n /// @notice Returns the amount of tokens to pay as a fee out of the specified `amount`.\n /// @dev The resulting fee will be `feePercent` of the REMAINING `amount` after subtracting the fee, not the full\n /// `amount`.\n /// @param amount The amount that the fee is based on, as a fixed point number.\n /// @param feePercent The fee percent, out of `JBConstants.MAX_FEE`.\n /// @return The amount of tokens to pay as a fee, as a fixed point number with the same number of decimals as the\n /// provided `amount`.\n function feeAmountIn(uint256 amount, uint256 feePercent) internal pure returns (uint256) {\n // The amount of tokens from the `amount` to pay as a fee. If reverse, the fee taken from a payout of\n // `amount`.\n return amount - mulDiv(amount, JBConstants.MAX_FEE, feePercent + JBConstants.MAX_FEE);\n }\n\n /// @notice Returns the fee that would have been paid based on an `amount` which has already had the fee subtracted\n /// from it.\n /// @dev The resulting fee will be `feePercent` of the full `amount`.\n /// @param amount The amount that the fee is based on, as a fixed point number with the same amount of decimals as\n /// this terminal.\n /// @param feePercent The fee percent, out of `JBConstants.MAX_FEE`.\n /// @return The amount of the fee, as a fixed point number with the same amount of decimals as this terminal.\n function feeAmountFrom(uint256 amount, uint256 feePercent) internal pure returns (uint256) {\n // The amount of tokens from the `amount` to pay as a fee. If reverse, the fee taken from a payout of\n // `amount`.\n return mulDiv(amount, feePercent, JBConstants.MAX_FEE);\n }\n}\n" + }, + "src/libraries/JBMetadataResolver.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.17;\n\n/**\n * @notice Library to parse and create metadata to store {id: data} entries.\n *\n * @dev Metadata are built as:\n * - 32B of reserved space for the protocol\n * - a lookup table `Id: offset`, defining the offset of the data for a given 4 bytes id.\n * The offset fits 1 bytes, the ID 4 bytes. This table is padded to 32B.\n * - the data for each id, padded to 32B each\n *\n * +-----------------------+ offset: 0\n * | 32B reserved |\n * +-----------------------+ offset: 1 = end of first 32B\n * | (ID1,offset1) |\n * | (ID2,offset2) |\n * | 0's padding |\n * +-----------------------+ offset: offset1 = 1 + number of words taken by the padded table\n * | id1 data1 |\n * | 0's padding |\n * +-----------------------+ offset: offset2 = offset1 + number of words taken by the data1\n * | id2 data2 |\n * | 0's padding |\n * +-----------------------+\n */\nlibrary JBMetadataResolver {\n error LENGTH_MISMATCH();\n error METADATA_TOO_LONG();\n error METADATA_TOO_SHORT();\n\n // The various sizes used in bytes.\n uint256 constant ID_SIZE = 4;\n uint256 constant ID_OFFSET_SIZE = 1;\n uint256 constant WORD_SIZE = 32;\n\n // The size that an ID takes in the lookup table (Identifier + Offset).\n uint256 constant TOTAL_ID_SIZE = 5; // ID_SIZE + ID_OFFSET_SIZE;\n\n // The amount of bytes to go forward to get to the offset of the next ID (aka. the end of the offset of the current\n // ID).\n uint256 constant NEXT_ID_OFFSET = 9; // TOTAL_ID_SIZE + ID_SIZE;\n\n // 1 word (32B) is reserved for the protocol .\n uint256 constant RESERVED_SIZE = 32; // 1 * WORD_SIZE;\n uint256 constant MIN_METADATA_LENGTH = 37; // RESERVED_SIZE + ID_SIZE + ID_OFFSET_SIZE;\n\n /**\n * @notice Parse the metadata to find the data for a specific ID\n *\n * @dev Returns false and an empty bytes if no data is found\n *\n * @param id The ID to find\n * @param metadata The metadata to parse\n *\n * @return found Whether the {id:data} was found\n * @return targetData The data for the ID (can be empty)\n */\n function getDataFor(bytes4 id, bytes memory metadata) internal pure returns (bool found, bytes memory targetData) {\n // Either no data or empty one with only one selector (32+4+1)\n if (metadata.length <= MIN_METADATA_LENGTH) return (false, \"\");\n\n // Get the first data offset - upcast to avoid overflow (same for other offset)\n uint256 firstOffset = uint8(metadata[RESERVED_SIZE + ID_SIZE]);\n\n // Parse the id's to find id, stop when next offset == 0 or current = first offset\n for (uint256 i = RESERVED_SIZE; metadata[i + ID_SIZE] != bytes1(0) && i < firstOffset * WORD_SIZE;) {\n uint256 currentOffset = uint256(uint8(metadata[i + ID_SIZE]));\n\n bytes4 parsedId;\n assembly {\n parsedId := mload(add(add(metadata, 0x20), i))\n }\n\n // _id found?\n if (parsedId == id) {\n // Are we at the end of the lookup table (either at the start of data's or next offset is 0/in the\n // padding)\n // If not, only return until from this offset to the begining of the next offset\n uint256 end = (i + NEXT_ID_OFFSET >= firstOffset * WORD_SIZE || metadata[i + NEXT_ID_OFFSET] == 0)\n ? metadata.length\n : uint256(uint8(metadata[i + NEXT_ID_OFFSET])) * WORD_SIZE;\n\n return (true, _sliceBytes(metadata, currentOffset * WORD_SIZE, end));\n }\n unchecked {\n i += TOTAL_ID_SIZE;\n }\n }\n }\n\n /**\n * @notice Add an {id: data} entry to an existing metadata. This is an append-only mechanism.\n *\n * @param originalMetadata The original metadata\n * @param idToAdd The id to add\n * @param dataToAdd The data to add\n *\n * @return newMetadata The new metadata with the entry added\n */\n function addToMetadata(\n bytes memory originalMetadata,\n bytes4 idToAdd,\n bytes memory dataToAdd\n )\n internal\n pure\n returns (bytes memory newMetadata)\n {\n // Empty original metadata and maybe something in the first 32 bytes: create new metadata\n if (originalMetadata.length <= RESERVED_SIZE) {\n return abi.encodePacked(bytes32(originalMetadata), bytes32(abi.encodePacked(idToAdd, uint8(2))), dataToAdd);\n }\n\n // There is something in the table offset, but not a valid entry - avoid overwriting\n if (originalMetadata.length < RESERVED_SIZE + ID_SIZE + 1) revert METADATA_TOO_SHORT();\n\n // Get the first data offset - upcast to avoid overflow (same for other offset)...\n uint256 firstOffset = uint8(originalMetadata[RESERVED_SIZE + ID_SIZE]);\n\n // ...go back to the beginning of the previous word (ie the last word of the table, as it can be padded)\n uint256 lastWordOfTable = firstOffset - 1;\n\n // The last offset stored in the table and its index\n uint256 lastOffset;\n\n uint256 lastOffsetIndex;\n\n // The number of words taken by the last data stored\n uint256 numberOfWordslastData;\n\n // Iterate to find the last entry of the table, lastOffset - we start from the end as the first value\n // encountered\n // will be the last offset\n for (uint256 i = firstOffset * WORD_SIZE - 1; i > lastWordOfTable * WORD_SIZE - 1; i--) {\n // If the byte is not 0, this is the last offset we're looking for\n if (originalMetadata[i] != 0) {\n lastOffset = uint8(originalMetadata[i]);\n lastOffsetIndex = i;\n\n // No rounding as this should be padded to 32B\n numberOfWordslastData = (originalMetadata.length - lastOffset * WORD_SIZE) / WORD_SIZE;\n\n // Copy the reserved word and the table and remove the previous padding\n newMetadata = _sliceBytes(originalMetadata, 0, lastOffsetIndex + 1);\n\n // Check if the new entry is still fitting in this word\n if (i + TOTAL_ID_SIZE >= firstOffset * WORD_SIZE) {\n // Increment every offset by 1 (as the table now takes one more word)\n for (uint256 j = RESERVED_SIZE + ID_SIZE; j < lastOffsetIndex + 1; j += TOTAL_ID_SIZE) {\n newMetadata[j] = bytes1(uint8(originalMetadata[j]) + 1);\n }\n\n // Increment the last offset so the new offset will be properly set too\n lastOffset++;\n }\n\n break;\n }\n }\n\n // Add the new entry after the last entry of the table, the new offset is the last offset + the number of words\n // taken by the last data\n newMetadata = abi.encodePacked(newMetadata, idToAdd, bytes1(uint8(lastOffset + numberOfWordslastData)));\n\n // Pad as needed - inlined for gas saving\n uint256 paddedLength =\n newMetadata.length % WORD_SIZE == 0 ? newMetadata.length : (newMetadata.length / WORD_SIZE + 1) * WORD_SIZE;\n assembly {\n mstore(newMetadata, paddedLength)\n }\n\n // Add existing data at the end\n newMetadata = abi.encodePacked(\n newMetadata, _sliceBytes(originalMetadata, firstOffset * WORD_SIZE, originalMetadata.length)\n );\n\n // Pad as needed\n paddedLength =\n newMetadata.length % WORD_SIZE == 0 ? newMetadata.length : (newMetadata.length / WORD_SIZE + 1) * WORD_SIZE;\n assembly {\n mstore(newMetadata, paddedLength)\n }\n\n // Append new data at the end\n newMetadata = abi.encodePacked(newMetadata, dataToAdd);\n\n // Pad again again as needed\n paddedLength =\n newMetadata.length % WORD_SIZE == 0 ? newMetadata.length : (newMetadata.length / WORD_SIZE + 1) * WORD_SIZE;\n\n assembly {\n mstore(newMetadata, paddedLength)\n }\n }\n\n /**\n * @notice Create the metadata for a list of {id:data}\n *\n * @dev Intended for offchain use (gas heavy)\n *\n * @param _ids The list of ids\n * @param _datas The list of corresponding datas\n *\n * @return metadata The resulting metadata\n */\n function createMetadata(\n bytes4[] memory _ids,\n bytes[] memory _datas\n )\n internal\n pure\n returns (bytes memory metadata)\n {\n if (_ids.length != _datas.length) revert LENGTH_MISMATCH();\n\n // Add a first empty 32B for the protocol reserved word\n metadata = abi.encodePacked(bytes32(0));\n\n // First offset for the data is after the first reserved word...\n uint256 _offset = 1;\n\n // ... and after the id/offset lookup table, rounding up to 32 bytes words if not a multiple\n _offset += ((_ids.length * JBMetadataResolver.TOTAL_ID_SIZE) - 1) / JBMetadataResolver.WORD_SIZE + 1;\n\n // For each id, add it to the lookup table with the next free offset, then increment the offset by the data\n // length (rounded up)\n for (uint256 _i; _i < _ids.length; ++_i) {\n metadata = abi.encodePacked(metadata, _ids[_i], bytes1(uint8(_offset)));\n _offset += _datas[_i].length / JBMetadataResolver.WORD_SIZE;\n\n // Overflowing a bytes1?\n if (_offset > 2 ** 8) revert METADATA_TOO_LONG();\n }\n\n // Pad the table to a multiple of 32B\n uint256 _paddedLength = metadata.length % JBMetadataResolver.WORD_SIZE == 0\n ? metadata.length\n : (metadata.length / JBMetadataResolver.WORD_SIZE + 1) * JBMetadataResolver.WORD_SIZE;\n assembly {\n mstore(metadata, _paddedLength)\n }\n\n // Add each metadata to the array, each padded to 32 bytes\n for (uint256 _i; _i < _datas.length; _i++) {\n metadata = abi.encodePacked(metadata, _datas[_i]);\n _paddedLength = metadata.length % JBMetadataResolver.WORD_SIZE == 0\n ? metadata.length\n : (metadata.length / JBMetadataResolver.WORD_SIZE + 1) * JBMetadataResolver.WORD_SIZE;\n\n assembly {\n mstore(metadata, _paddedLength)\n }\n }\n }\n\n /// @notice Slice bytes from a start index to an end index.\n /// @param data The bytes array to slice\n /// @param start The start index to slice at.\n /// @param end The end index to slice at.\n /// @param slicedBytes The sliced array.\n function _sliceBytes(\n bytes memory data,\n uint256 start,\n uint256 end\n )\n internal\n pure\n returns (bytes memory slicedBytes)\n {\n assembly {\n let length := sub(end, start)\n\n // Allocate memory at the freemem(add 0x20 to include the length)\n slicedBytes := mload(0x40)\n mstore(0x40, add(add(slicedBytes, length), 0x20))\n\n // Store the length (first element)\n mstore(slicedBytes, length)\n\n // compute the actual data first offset only once\n let startBytes := add(add(data, 0x20), start)\n\n // same for the out array\n let sliceBytesStartOfData := add(slicedBytes, 0x20)\n\n // store dem data\n for { let i := 0 } lt(i, end) { i := add(i, 0x20) } {\n mstore(add(sliceBytesStartOfData, i), mload(add(startBytes, i)))\n }\n }\n }\n}\n" + }, + "src/structs/JBFee.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @custom:member amount The total amount the fee was taken from, as a fixed point number with the same number of\n/// decimals as the terminal in which this struct was created.\n/// @custom:member beneficiary The address that will receive the tokens that are minted as a result of the fee payment.\n/// @custom:member unlockTimestamp The timestamp at which the fee is unlocked and can be processed.\nstruct JBFee {\n uint256 amount;\n address beneficiary;\n uint256 unlockTimestamp;\n}\n" + }, + "src/structs/JBSingleAllowanceContext.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @custom:member sigDeadline Deadline on the permit signature.\n/// @custom:member amount The maximum amount allowed to spend.\n/// @custom:member expiration Timestamp at which a spender's token allowances become invalid.\n/// @custom:member nonce An incrementing value indexed per owner,token,and spender for each signature.\n/// @custom:member signature The signature over the permit data. Supports EOA signatures, compact signatures defined by\n/// EIP-2098, and contract signatures defined by EIP-1271.\nstruct JBSingleAllowanceContext {\n uint256 sigDeadline;\n uint160 amount;\n uint48 expiration;\n uint48 nonce;\n bytes signature;\n}\n" + } + } + } +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBController.json b/deployments/nana-core/optimism_sepolia/JBController.json new file mode 100644 index 00000000..3a1fc958 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBController.json @@ -0,0 +1,3441 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBController", + "address": "0xdAF6226Aafe296bbCCBEC815133386Cd910Ed582", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "rulesets", + "type": "address", + "internalType": "contract IJBRulesets" + }, + { + "name": "tokens", + "type": "address", + "internalType": "contract IJBTokens" + }, + { + "name": "splits", + "type": "address", + "internalType": "contract IJBSplits" + }, + { + "name": "fundAccessLimits", + "type": "address", + "internalType": "contract IJBFundAccessLimits" + }, + { + "name": "trustedForwarder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FUND_ACCESS_LIMITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBFundAccessLimits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "RULESETS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBRulesets" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SPLITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBSplits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "TOKENS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTokens" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "burnTokensOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimTokensFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "currentRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployERC20For", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTrustedForwarder", + "inputs": [ + { + "name": "forwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestQueuedRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approvalStatus", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "launchProjectFor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "projectUri", + "type": "string", + "internalType": "string" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "terminalConfigurations", + "type": "tuple[]", + "internalType": "struct JBTerminalConfig[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "tokensToAccept", + "type": "address[]", + "internalType": "address[]" + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "launchRulesetsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "terminalConfigurations", + "type": "tuple[]", + "internalType": "struct JBTerminalConfig[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "tokensToAccept", + "type": "address[]", + "internalType": "address[]" + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "migrateController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "to", + "type": "address", + "internalType": "contract IJBMigratable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mintTokensOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "useReservedRate", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "payReservedTokenToTerminal", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + }, + { + "name": "splitAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pendingReservedTokenBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "queueRulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "receiveMigrationFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "contract IERC165" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startingId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "size", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "rulesets", + "type": "tuple[]", + "internalType": "struct JBRulesetWithMetadata[]", + "components": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sendReservedTokensToSplitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setControllerAllowed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setSplitGroupsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTerminalsAllowed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setTokenFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setUriOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalTokenSupplyWithReservedTokensOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferCreditsFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "trustedForwarder", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "upcomingRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uriOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "BurnTokens", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LaunchProject", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LaunchRulesets", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "to", + "type": "address", + "indexed": false, + "internalType": "contract IJBMigratable" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MintTokens", + "inputs": [ + { + "name": "beneficiary", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "reservedRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PrepMigration", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "from", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "QueueRulesets", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservedDistributionReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendReservedTokensToSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendReservedTokensToSplits", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetMetadata", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "CONTROLLER_MIGRATION_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "CREDIT_TRANSFERS_PAUSED", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_BASE_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_REDEMPTION_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RESERVED_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "MINT_NOT_ALLOWED_AND_NOT_TERMINAL_OR_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "NO_BURNABLE_TOKENS", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "RULESET_ALREADY_LAUNCHED", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "ZERO_TOKENS_TO_MINT", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "contractAddress": null, + "cumulativeGasUsed": "10405018", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000253", + "gasUsed": "9790655", + "hash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "index": 7, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 12, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x784b7dfeb7d4ed0c7ced9de3602a09e6c777828e1add8d80d512761c9c97d2ca" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 13, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 14, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 15, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 16, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 17, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 18, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 19, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 20, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 21, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 22, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 29, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 30, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 31, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 32, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040020000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000800000000400100800000000200000000000000000000804000000020004000081010000000000000000000020208400000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBRulesets\",\"name\":\"rulesets\",\"type\":\"address\"},{\"internalType\":\"contract IJBTokens\",\"name\":\"tokens\",\"type\":\"address\"},{\"internalType\":\"contract IJBSplits\",\"name\":\"splits\",\"type\":\"address\"},{\"internalType\":\"contract IJBFundAccessLimits\",\"name\":\"fundAccessLimits\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_MIGRATION_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CREDIT_TRANSFERS_PAUSED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_BASE_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_REDEMPTION_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RESERVED_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"MINT_NOT_ALLOWED_AND_NOT_TERMINAL_OR_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NO_BURNABLE_TOKENS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RULESET_ALREADY_LAUNCHED\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ZERO_TOKENS_TO_MINT\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BurnTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"LaunchProject\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"LaunchRulesets\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBMigratable\",\"name\":\"to\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MigrateController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MintTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"PrepMigration\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"QueueRulesets\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ReservedDistributionReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendReservedTokensToSplit\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendReservedTokensToSplits\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetMetadata\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FUND_ACCESS_LIMITS\",\"outputs\":[{\"internalType\":\"contract IJBFundAccessLimits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"RULESETS\",\"outputs\":[{\"internalType\":\"contract IJBRulesets\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"SPLITS\",\"outputs\":[{\"internalType\":\"contract IJBSplits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"TOKENS\",\"outputs\":[{\"internalType\":\"contract IJBTokens\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"burnTokensOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimTokensFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"deployERC20For\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestQueuedRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"approvalStatus\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"projectUri\",\"type\":\"string\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"struct JBTerminalConfig[]\",\"name\":\"terminalConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokensToAccept\",\"type\":\"address[]\"}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"launchProjectFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"struct JBTerminalConfig[]\",\"name\":\"terminalConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokensToAccept\",\"type\":\"address[]\"}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"launchRulesetsFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBMigratable\",\"name\":\"to\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateController\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"useReservedRate\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"mintTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"splitAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"payReservedTokenToTerminal\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"pendingReservedTokenBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"queueRulesetsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IERC165\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"receiveMigrationFrom\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startingId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rulesetsOf\",\"outputs\":[{\"internalType\":\"struct JBRulesetWithMetadata[]\",\"name\":\"rulesets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"sendReservedTokensToSplitsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"setControllerAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setSplitGroupsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"setTerminalsAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setUriOf\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalTokenSupplyWithReservedTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferCreditsFrom\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upcomingRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"uriOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burnTokensOf(address,uint256,uint256,string)\":{\"details\":\"Only a token holder, an operator with the `BURN_TOKENS` permission from them, or a project's terminal can burn a holder's tokens.\",\"params\":{\"holder\":\"The account whose tokens are being burned.\",\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project that the tokens being burned belong to.\",\"tokenCount\":\"The number of tokens to burn.\"}},\"claimTokensFor(address,uint256,uint256,address)\":{\"details\":\"Only a credit holder or an operator with the `CLAIM_TOKENS` permission from that holder can redeem those credits to claim tokens.\",\"params\":{\"amount\":\"The amount of tokens to claim.\",\"beneficiary\":\"The account into which the claimed tokens will go.\",\"holder\":\"The owner of the credits being redeemed.\",\"projectId\":\"The ID of the project whose tokens are being claimed.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"fundAccessLimits\":\"A contract that stores fund access limits for each project.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\",\"rulesets\":\"A contract storing and managing project rulesets.\",\"splits\":\"A contract that stores splits for each project.\",\"tokens\":\"A contract that manages token minting and burning.\"}},\"currentRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The current ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The current ruleset as a `JBRuleset` struct.\"}},\"deployERC20For(uint256,string,string,bytes32)\":{\"details\":\"Deploys a project's ERC-20 token contract.Only a project's owner or an operator with `ISSUE_TOKENS` permission from the owner can deploy its token.\",\"params\":{\"name\":\"The ERC-20's name.\",\"projectId\":\"The ID of the project to deploy an ERC-20 token for.\",\"symbol\":\"The ERC-20's symbol.\"},\"returns\":{\"token\":\"The address of the token that was deployed.\"}},\"getRulesetOf(uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The ruleset as a `JBRuleset` struct.\"}},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"latestQueuedRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"approvalStatus\":\"The approval status of the ruleset.\",\"metadata\":\"The latest queued ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The latest queued ruleset as a `JBRuleset` struct.\"}},\"launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"details\":\"Each operation within this transaction can be done in sequence separately.Anyone can deploy a project on an owner's behalf.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"owner\":\"The address to set as the owner of the project. The project ERC-721 will be owned by this address.\",\"projectUri\":\"A URI to associate with the project. This can be updated any time by the owner of the project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.\",\"rulesetConfigurations\":\"The ruleset configurations to queue.\",\"terminalConfigurations\":\"The terminal configurations to add for the project.\"},\"returns\":{\"projectId\":\"The ID of the project.\"}},\"launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"details\":\"Each operation within this transaction can be done in sequence separately.Only a project's owner or an operator with the `QUEUE_RULESETS` permission can launch rulesets for a project.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project to launch rulesets for.\",\"rulesetConfigurations\":\"The ruleset configurations to queue.\",\"terminalConfigurations\":\"The terminal configurations to add for the project.\"},\"returns\":{\"rulesetId\":\"The ID of the ruleset that was successfully launched.\"}},\"migrateController(uint256,address)\":{\"details\":\"Only a project's owner or an operator with the `MIGRATE_CONTROLLER` permission from the owner can migrate it.\",\"params\":{\"projectId\":\"The ID of the project that will be migrated from this controller.\",\"to\":\"The controller the project is migrating to.\"}},\"mintTokensOf(uint256,uint256,address,string,bool)\":{\"details\":\"Only a project's owner, an operator with the `MINT_TOKENS` permission from them, one of the project's terminals, or its current data hook can mint a project's tokens.If the ruleset has discretionary minting disabled, this function can only be called by the terminal or data hook.\",\"params\":{\"beneficiary\":\"The account which will receive the (non-reserved) minted tokens.\",\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project the tokens being minted belong to.\",\"tokenCount\":\"The total number of tokens to mint, including any tokens that will be reserved.\",\"useReservedRate\":\"Whether to use the current ruleset's reserved rate in the minting calculations.\"},\"returns\":{\"beneficiaryTokenCount\":\"The number of tokens minted for the beneficiary.\"}},\"payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)\":{\"details\":\"Can only be called by this terminal itself.\",\"params\":{\"beneficiary\":\"The beneficiary of the payment.\",\"metadata\":\"The metadata that gets send to the terminal.\",\"projectId\":\"The projectId that is being paid.\",\"splitAmount\":\"The amount that is being send to the terminal as part of this split.\",\"terminal\":\"The terminal to pay the token to.\",\"token\":\"The token that is being paid.\"}},\"queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)\":{\"details\":\"Only a project's owner or an operator with the `QUEUE_RULESETS` permission from them can queue rulesets for a project.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project that rulesets are being queued for.\",\"rulesetConfigurations\":\"The configurations of the rulesets to queue.\"},\"returns\":{\"rulesetId\":\"The ID of the last ruleset which was successfully queued.\"}},\"receiveMigrationFrom(address,uint256)\":{\"details\":\"This controller should not yet be the project's controller.\",\"params\":{\"from\":\"The controller being migrated from.\",\"projectId\":\"The ID of the project that will be migrated to this controller.\"}},\"rulesetsOf(uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the rulesets of.\",\"size\":\"The maximum number of rulesets to return.\",\"startingId\":\"The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used.\"},\"returns\":{\"rulesets\":\"The rulesets with their metadata as an array of `JBRulesetWithMetadata` structs.\"}},\"sendReservedTokensToSplitsOf(uint256,string)\":{\"details\":\"If the project has no reserved token splits, or they don't add up to 100%, the leftover tokens are minted to the project's owner.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project to which the reserved tokens belong.\"},\"returns\":{\"_0\":\"The amount of reserved tokens minted and sent.\"}},\"setControllerAllowed(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the flag is for.\"},\"returns\":{\"_0\":\"The flag\"}},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"details\":\"Only a project's owner or an operator with `SET_SPLITS` permission from the owner can set its splits through the project's controller.The new split groups must include any currently set splits that are locked.\",\"params\":{\"projectId\":\"The ID of the project split groups are being set for.\",\"rulesetId\":\"The ID of the ruleset the split groups should be active in. Use a `rulesetId` of 0 to set the default split groups which are active when a project's ruleset has no splits set. If no default splits have been set, all splits are sent to the project's owner.\",\"splitGroups\":\"An array of split groups to set.\"}},\"setTerminalsAllowed(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the flag is for.\"},\"returns\":{\"_0\":\"The flag\"}},\"setTokenFor(uint256,address)\":{\"details\":\"Only a project's owner or an operator with `SET_TOKEN` permission from the owner can set its token.\",\"params\":{\"projectId\":\"The ID of the project to set the token of.\",\"token\":\"The new token's address.\"}},\"setUriOf(uint256,string)\":{\"details\":\"Only a project's owner can set its metadata through the project's controller.Frontends typically use an IPFS hash for the metadata content, optionally with the `ipfs://` prefix.\",\"params\":{\"metadata\":\"The metadata content to set.\",\"projectId\":\"The ID of the project to set the metadata of.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"totalTokenSupplyWithReservedTokensOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the total token supply of.\"},\"returns\":{\"_0\":\"The current total token supply of the project, including pending reserved tokens that have not been sent to splits yet.\"}},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"details\":\"Only a credit holder or an operator with the `TRANSFER_TOKENS` permission from that holder can transfer those credits.\",\"params\":{\"amount\":\"The amount of credits to transfer.\",\"holder\":\"The address to transfer credits from.\",\"projectId\":\"The ID of the project whose credits are being transferred.\",\"recipient\":\"The recipient of the credits.\"}},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"upcomingRulesetOf(uint256)\":{\"details\":\"If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The upcoming ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The upcoming ruleset as a `JBRuleset` struct.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"FUND_ACCESS_LIMITS()\":{\"notice\":\"A contract that stores fund access limits for each project.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"RULESETS()\":{\"notice\":\"The contract storing and managing project rulesets.\"},\"SPLITS()\":{\"notice\":\"The contract that stores splits for each project.\"},\"TOKENS()\":{\"notice\":\"The contract that manages token minting and burning.\"},\"burnTokensOf(address,uint256,uint256,string)\":{\"notice\":\"Burns a project's tokens from a specific holder's balance.\"},\"claimTokensFor(address,uint256,uint256,address)\":{\"notice\":\"Redeem credits to claim tokens into a holder's wallet.\"},\"currentRulesetOf(uint256)\":{\"notice\":\"A project's current ruleset along with its metadata.\"},\"deployERC20For(uint256,string,string,bytes32)\":{\"notice\":\"Deploys an ERC-20 token for a project. It will be used when claiming tokens (with credits).\"},\"getRulesetOf(uint256,uint256)\":{\"notice\":\"A get `JBRuleset` and `JBRulesetMetadata` structs for the specified `rulesetId`.\"},\"latestQueuedRulesetOf(uint256)\":{\"notice\":\"The latest ruleset queued for a project. Returns the ruleset's struct, its current approval status, and its metadata.\"},\"launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"notice\":\"Creates a project. This will mint the project's ERC-721 to the specified owner's account, queue its first ruleset, and set up any splits.\"},\"launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"notice\":\"Creates an initial sequence of one or more rulesets for an existing project.\"},\"migrateController(uint256,address)\":{\"notice\":\"Allows a project to migrate from this controller to another one.\"},\"mintTokensOf(uint256,uint256,address,string,bool)\":{\"notice\":\"Mint new project tokens into an account, optionally reserving a portion according to the current ruleset's reserved rate.\"},\"payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)\":{\"notice\":\"Pay the reserved rate tokens to a projects terminal.\"},\"pendingReservedTokenBalanceOf(uint256)\":{\"notice\":\"The reserved token balance that has not yet been realized (sent out to the reserved split group) for a project.\"},\"queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)\":{\"notice\":\"Queues one or more rulesets that will take effect once the current ruleset expires. Rulesets only take effect if they are approved by the previous ruleset's approval hook.\"},\"receiveMigrationFrom(address,uint256)\":{\"notice\":\"Allows other controllers to signal to this one that a migration is expected for the specified project.\"},\"rulesetsOf(uint256,uint256,uint256)\":{\"notice\":\"Get an array of a project's rulesets (with metadata) up to a maximum array size, sorted from latest to earliest.\"},\"sendReservedTokensToSplitsOf(uint256,string)\":{\"notice\":\"Sends a project's pending reserved tokens to its reserved token splits.\"},\"setControllerAllowed(uint256)\":{\"notice\":\"A flag indicating if the project currently allows its controller to be set.\"},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"notice\":\"Sets a project's split groups.\"},\"setTerminalsAllowed(uint256)\":{\"notice\":\"A flag indicating if the project currently allows terminals to be set.\"},\"setTokenFor(uint256,address)\":{\"notice\":\"Set a project's token if not already set.\"},\"setUriOf(uint256,string)\":{\"notice\":\"Set a project's metadata URI content.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"totalTokenSupplyWithReservedTokensOf(uint256)\":{\"notice\":\"Gets the current token supply of a project, including pending reserved tokens.\"},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"notice\":\"Allows a holder to transfer credits to another account.\"},\"upcomingRulesetOf(uint256)\":{\"notice\":\"A project's upcoming ruleset along with its metadata.\"},\"uriOf(uint256)\":{\"notice\":\"The metadata URI for each project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBController.sol\":\"JBController\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBController.sol\":{\"keccak256\":\"0x2098a78f94e5ea023725c3fd27c40ab370f4940b681d7d70425d9c0dc870e818\",\"urls\":[\"bzz-raw://082dae16d5ab57042d17918f2076b9c5d5eb69ca77336311e0caa9a9a60de881\",\"dweb:/ipfs/QmQWZJVzvrTc7P63CjiMDAq4PYnBTG1X4t2ArxNa4RWeYc\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetDataHook.sol\":{\"keccak256\":\"0x3fea9fcab6f0335e67f0f052cf5d3446e9310808f88b5878d21586be00f89f85\",\"urls\":[\"bzz-raw://5506848f471d308a14523f91202d76d960f8255e227d29d34b0892ef70315cae\",\"dweb:/ipfs/QmakRKFctSZobpem1caU2zXqhiPQnaYVa7Y6NdAPAonHaU\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/libraries/JBSplitGroupIds.sol\":{\"keccak256\":\"0x932ca2645d443f04f86c8ffb27b5c58c4fbdc7b5a145fba1d43f1db9bd488a0f\",\"urls\":[\"bzz-raw://fa412d2c5726a868a258cd518648726b0784ab7ac7566376b82ba09680f66227\",\"dweb:/ipfs/QmZvfjBt7PQzTWNzrhysyHBegUbbu4aY2xDzBGnwqMaqnF\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBBeforePayRecordedContext.sol\":{\"keccak256\":\"0x5b04e814da83c7e83ff892ab07eaad6abce6f7b85a75f8da9380e9fc3470bc81\",\"urls\":[\"bzz-raw://11c889aab993fce3e3cc2dedc15fc30dd367e7fef9b7b1bfd6a6a9f248781731\",\"dweb:/ipfs/QmVVtydCD1azeWhGLxA1hthxfLyKzMHZ1eVzCz3a3R5dLy\"],\"license\":\"MIT\"},\"src/structs/JBBeforeRedeemRecordedContext.sol\":{\"keccak256\":\"0x73eadaf6827e82f6ccbe3a1e2b2b7fc6c59cef471f73335041b30ddcc000989d\",\"urls\":[\"bzz-raw://2f3ee84662eed565dbdaed406ef836fffaf55cccd417575578152e5085d0b1f2\",\"dweb:/ipfs/QmaJGFS7hxJsiUdKvbv5BKhSwceDEzKBnt7t5YeNWvYgMK\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "0x3295C9c7374E583cb2e6Ed455EAf9908022159D0", + "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "0x2Fd39295dd948dfBB8Aa7e2508ea5Fc15096682b", + "0xB2b5841DBeF766d4b521221732F9B618fCf34A87" + ], + "bytecode": "0x6101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da581565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876102ae565b6102ae7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb81565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6102ae7f0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b81565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d79091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b16935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da56001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "burnTokensOf(address,uint256,uint256,string)": { + "details": "Only a token holder, an operator with the `BURN_TOKENS` permission from them, or a project's terminal can burn a holder's tokens.", + "params": { + "holder": "The account whose tokens are being burned.", + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project that the tokens being burned belong to.", + "tokenCount": "The number of tokens to burn." + } + }, + "claimTokensFor(address,uint256,uint256,address)": { + "details": "Only a credit holder or an operator with the `CLAIM_TOKENS` permission from that holder can redeem those credits to claim tokens.", + "params": { + "amount": "The amount of tokens to claim.", + "beneficiary": "The account into which the claimed tokens will go.", + "holder": "The owner of the credits being redeemed.", + "projectId": "The ID of the project whose tokens are being claimed." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "fundAccessLimits": "A contract that stores fund access limits for each project.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers.", + "rulesets": "A contract storing and managing project rulesets.", + "splits": "A contract that stores splits for each project.", + "tokens": "A contract that manages token minting and burning." + } + }, + "currentRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The current ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The current ruleset as a `JBRuleset` struct." + } + }, + "deployERC20For(uint256,string,string,bytes32)": { + "details": "Deploys a project's ERC-20 token contract.Only a project's owner or an operator with `ISSUE_TOKENS` permission from the owner can deploy its token.", + "params": { + "name": "The ERC-20's name.", + "projectId": "The ID of the project to deploy an ERC-20 token for.", + "symbol": "The ERC-20's symbol." + }, + "returns": { + "token": "The address of the token that was deployed." + } + }, + "getRulesetOf(uint256,uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The ruleset as a `JBRuleset` struct." + } + }, + "isTrustedForwarder(address)": { + "details": "Indicates whether any particular address is the trusted forwarder." + }, + "latestQueuedRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "approvalStatus": "The approval status of the ruleset.", + "metadata": "The latest queued ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The latest queued ruleset as a `JBRuleset` struct." + } + }, + "launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "details": "Each operation within this transaction can be done in sequence separately.Anyone can deploy a project on an owner's behalf.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "owner": "The address to set as the owner of the project. The project ERC-721 will be owned by this address.", + "projectUri": "A URI to associate with the project. This can be updated any time by the owner of the project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.", + "rulesetConfigurations": "The ruleset configurations to queue.", + "terminalConfigurations": "The terminal configurations to add for the project." + }, + "returns": { + "projectId": "The ID of the project." + } + }, + "launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "details": "Each operation within this transaction can be done in sequence separately.Only a project's owner or an operator with the `QUEUE_RULESETS` permission can launch rulesets for a project.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project to launch rulesets for.", + "rulesetConfigurations": "The ruleset configurations to queue.", + "terminalConfigurations": "The terminal configurations to add for the project." + }, + "returns": { + "rulesetId": "The ID of the ruleset that was successfully launched." + } + }, + "migrateController(uint256,address)": { + "details": "Only a project's owner or an operator with the `MIGRATE_CONTROLLER` permission from the owner can migrate it.", + "params": { + "projectId": "The ID of the project that will be migrated from this controller.", + "to": "The controller the project is migrating to." + } + }, + "mintTokensOf(uint256,uint256,address,string,bool)": { + "details": "Only a project's owner, an operator with the `MINT_TOKENS` permission from them, one of the project's terminals, or its current data hook can mint a project's tokens.If the ruleset has discretionary minting disabled, this function can only be called by the terminal or data hook.", + "params": { + "beneficiary": "The account which will receive the (non-reserved) minted tokens.", + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project the tokens being minted belong to.", + "tokenCount": "The total number of tokens to mint, including any tokens that will be reserved.", + "useReservedRate": "Whether to use the current ruleset's reserved rate in the minting calculations." + }, + "returns": { + "beneficiaryTokenCount": "The number of tokens minted for the beneficiary." + } + }, + "payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)": { + "details": "Can only be called by this terminal itself.", + "params": { + "beneficiary": "The beneficiary of the payment.", + "metadata": "The metadata that gets send to the terminal.", + "projectId": "The projectId that is being paid.", + "splitAmount": "The amount that is being send to the terminal as part of this split.", + "terminal": "The terminal to pay the token to.", + "token": "The token that is being paid." + } + }, + "queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)": { + "details": "Only a project's owner or an operator with the `QUEUE_RULESETS` permission from them can queue rulesets for a project.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project that rulesets are being queued for.", + "rulesetConfigurations": "The configurations of the rulesets to queue." + }, + "returns": { + "rulesetId": "The ID of the last ruleset which was successfully queued." + } + }, + "receiveMigrationFrom(address,uint256)": { + "details": "This controller should not yet be the project's controller.", + "params": { + "from": "The controller being migrated from.", + "projectId": "The ID of the project that will be migrated to this controller." + } + }, + "rulesetsOf(uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the rulesets of.", + "size": "The maximum number of rulesets to return.", + "startingId": "The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used." + }, + "returns": { + "rulesets": "The rulesets with their metadata as an array of `JBRulesetWithMetadata` structs." + } + }, + "sendReservedTokensToSplitsOf(uint256,string)": { + "details": "If the project has no reserved token splits, or they don't add up to 100%, the leftover tokens are minted to the project's owner.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project to which the reserved tokens belong." + }, + "returns": { + "_0": "The amount of reserved tokens minted and sent." + } + }, + "setControllerAllowed(uint256)": { + "params": { + "projectId": "The ID of the project the flag is for." + }, + "returns": { + "_0": "The flag" + } + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "details": "Only a project's owner or an operator with `SET_SPLITS` permission from the owner can set its splits through the project's controller.The new split groups must include any currently set splits that are locked.", + "params": { + "projectId": "The ID of the project split groups are being set for.", + "rulesetId": "The ID of the ruleset the split groups should be active in. Use a `rulesetId` of 0 to set the default split groups which are active when a project's ruleset has no splits set. If no default splits have been set, all splits are sent to the project's owner.", + "splitGroups": "An array of split groups to set." + } + }, + "setTerminalsAllowed(uint256)": { + "params": { + "projectId": "The ID of the project the flag is for." + }, + "returns": { + "_0": "The flag" + } + }, + "setTokenFor(uint256,address)": { + "details": "Only a project's owner or an operator with `SET_TOKEN` permission from the owner can set its token.", + "params": { + "projectId": "The ID of the project to set the token of.", + "token": "The new token's address." + } + }, + "setUriOf(uint256,string)": { + "details": "Only a project's owner can set its metadata through the project's controller.Frontends typically use an IPFS hash for the metadata content, optionally with the `ipfs://` prefix.", + "params": { + "metadata": "The metadata content to set.", + "projectId": "The ID of the project to set the metadata of." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "totalTokenSupplyWithReservedTokensOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the total token supply of." + }, + "returns": { + "_0": "The current total token supply of the project, including pending reserved tokens that have not been sent to splits yet." + } + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "details": "Only a credit holder or an operator with the `TRANSFER_TOKENS` permission from that holder can transfer those credits.", + "params": { + "amount": "The amount of credits to transfer.", + "holder": "The address to transfer credits from.", + "projectId": "The ID of the project whose credits are being transferred.", + "recipient": "The recipient of the credits." + } + }, + "trustedForwarder()": { + "details": "Returns the address of the trusted forwarder." + }, + "upcomingRulesetOf(uint256)": { + "details": "If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The upcoming ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The upcoming ruleset as a `JBRuleset` struct." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "FUND_ACCESS_LIMITS()": { + "notice": "A contract that stores fund access limits for each project." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "RULESETS()": { + "notice": "The contract storing and managing project rulesets." + }, + "SPLITS()": { + "notice": "The contract that stores splits for each project." + }, + "TOKENS()": { + "notice": "The contract that manages token minting and burning." + }, + "burnTokensOf(address,uint256,uint256,string)": { + "notice": "Burns a project's tokens from a specific holder's balance." + }, + "claimTokensFor(address,uint256,uint256,address)": { + "notice": "Redeem credits to claim tokens into a holder's wallet." + }, + "currentRulesetOf(uint256)": { + "notice": "A project's current ruleset along with its metadata." + }, + "deployERC20For(uint256,string,string,bytes32)": { + "notice": "Deploys an ERC-20 token for a project. It will be used when claiming tokens (with credits)." + }, + "getRulesetOf(uint256,uint256)": { + "notice": "A get `JBRuleset` and `JBRulesetMetadata` structs for the specified `rulesetId`." + }, + "latestQueuedRulesetOf(uint256)": { + "notice": "The latest ruleset queued for a project. Returns the ruleset's struct, its current approval status, and its metadata." + }, + "launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "notice": "Creates a project. This will mint the project's ERC-721 to the specified owner's account, queue its first ruleset, and set up any splits." + }, + "launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "notice": "Creates an initial sequence of one or more rulesets for an existing project." + }, + "migrateController(uint256,address)": { + "notice": "Allows a project to migrate from this controller to another one." + }, + "mintTokensOf(uint256,uint256,address,string,bool)": { + "notice": "Mint new project tokens into an account, optionally reserving a portion according to the current ruleset's reserved rate." + }, + "payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)": { + "notice": "Pay the reserved rate tokens to a projects terminal." + }, + "pendingReservedTokenBalanceOf(uint256)": { + "notice": "The reserved token balance that has not yet been realized (sent out to the reserved split group) for a project." + }, + "queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)": { + "notice": "Queues one or more rulesets that will take effect once the current ruleset expires. Rulesets only take effect if they are approved by the previous ruleset's approval hook." + }, + "receiveMigrationFrom(address,uint256)": { + "notice": "Allows other controllers to signal to this one that a migration is expected for the specified project." + }, + "rulesetsOf(uint256,uint256,uint256)": { + "notice": "Get an array of a project's rulesets (with metadata) up to a maximum array size, sorted from latest to earliest." + }, + "sendReservedTokensToSplitsOf(uint256,string)": { + "notice": "Sends a project's pending reserved tokens to its reserved token splits." + }, + "setControllerAllowed(uint256)": { + "notice": "A flag indicating if the project currently allows its controller to be set." + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "notice": "Sets a project's split groups." + }, + "setTerminalsAllowed(uint256)": { + "notice": "A flag indicating if the project currently allows terminals to be set." + }, + "setTokenFor(uint256,address)": { + "notice": "Set a project's token if not already set." + }, + "setUriOf(uint256,string)": { + "notice": "Set a project's metadata URI content." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "totalTokenSupplyWithReservedTokensOf(uint256)": { + "notice": "Gets the current token supply of a project, including pending reserved tokens." + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "notice": "Allows a holder to transfer credits to another account." + }, + "upcomingRulesetOf(uint256)": { + "notice": "A project's upcoming ruleset along with its metadata." + }, + "uriOf(uint256)": { + "notice": "The metadata URI for each project. This is typically an IPFS hash, optionally with the `ipfs://` prefix." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBController.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBDirectory.json b/deployments/nana-core/optimism_sepolia/JBDirectory.json new file mode 100644 index 00000000..ad2236a6 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBDirectory.json @@ -0,0 +1,955 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBDirectory", + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "controllerOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC165" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "primaryTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setControllerOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "controller", + "type": "address", + "internalType": "contract IERC165" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setIsAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPrimaryTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTerminalsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminals", + "type": "address[]", + "internalType": "contract IJBTerminal[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "terminalsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IJBTerminal[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "controller", + "type": "address", + "indexed": true, + "internalType": "contract IERC165" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetIsAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "indexed": true, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetPrimaryTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "terminal", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetTerminals", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "terminals", + "type": "address[]", + "indexed": false, + "internalType": "contract IJBTerminal[]" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "DUPLICATE_TERMINALS", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PROJECT_ID_IN_DIRECTORY", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "SET_CONTROLLER_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "SET_TERMINALS_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_ACCEPTED", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DUPLICATE_TERMINALS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PROJECT_ID_IN_DIRECTORY\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"SET_CONTROLLER_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"SET_TERMINALS_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_ACCEPTED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IERC165\",\"name\":\"controller\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetIsAllowedToSetFirstController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetPrimaryTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"terminals\",\"type\":\"address[]\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetTerminals\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"controllerOf\",\"outputs\":[{\"internalType\":\"contract IERC165\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isAllowedToSetFirstController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTerminalOf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"primaryTerminalOf\",\"outputs\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC165\",\"name\":\"controller\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setControllerOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setIsAllowedToSetFirstController\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setPrimaryTerminalOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"terminals\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTerminalsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"terminalsOf\",\"outputs\":[{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"\",\"type\":\"address[]\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"owner\":\"The address that will own the contract.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\"}},\"isTerminalOf(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project to check for the terminal.\",\"terminal\":\"The address of the terminal to check for.\"},\"returns\":{\"_0\":\"A flag indicating whether or not the specified terminal is a terminal of the specified project.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"primaryTerminalOf(uint256,address)\":{\"details\":\"The zero address is returned if a terminal isn't found for the specified token.\",\"params\":{\"projectId\":\"The ID of the project to get the primary terminal of.\",\"token\":\"The token the terminal accepts.\"},\"returns\":{\"_0\":\"The address of the primary terminal for the specified project and token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setControllerOf(uint256,address)\":{\"details\":\"A controller can be set if:- The project's ruleset allows setting the controller, and the message sender is the project owner or an operator with the `SET_CONTROLLER` permission from them.- OR the message sender is the project's current controller.- OR an allowedlisted address is setting a controller for a project that doesn't already have a controller.\",\"params\":{\"controller\":\"The address of the new controller to set for the project.\",\"projectId\":\"The ID of the project to set the controller of.\"}},\"setIsAllowedToSetFirstController(address,bool)\":{\"details\":\"Only this contract's owner can call this function.These addresses are known and vetted controllers as well as contracts designed to launch new projects.A project can set its own controller without being on the allow list.If you would like an address/contract allowlisted, please reach out to the contract owner.\",\"params\":{\"addr\":\"The address to allow or not allow.\",\"flag\":\"Whether the address is allowed or not allowed to set first controllers for projects. Use `true` to allow and `false` to not allow.\"}},\"setPrimaryTerminalOf(uint256,address,address)\":{\"details\":\"The primary terminal is where a token should be routed to by default.This is useful in case a project has several terminals connected for a particular token.If setting a newly added terminal and the ruleset doesn't allow new terminals, the caller must be the current controller.\",\"params\":{\"projectId\":\"The ID of the project a primary token is being set for.\",\"terminal\":\"The terminal to make the primary terminal for the project and token.\",\"token\":\"The token to set the primary terminal for.\"}},\"setTerminalsOf(uint256,address[])\":{\"details\":\"Only a project's owner, an operator with the `SET_TERMINALS` permission from the owner, or the project's controller can set its terminals.Unless the caller is the project's controller, the project's ruleset must allow setting terminals.\",\"params\":{\"projectId\":\"The ID of the project to set terminals for.\",\"terminals\":\"An array of terminal addresses to set for the project.\"}},\"terminalsOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the terminals of.\"},\"returns\":{\"_0\":\"An array of terminal addresses.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"controllerOf(uint256)\":{\"notice\":\"The controller, which dictates how terminals interact with tokens and rulesets, for a given project ID.\"},\"isAllowedToSetFirstController(address)\":{\"notice\":\"Addresses allowed to set a project's first controller on their behalf. These addresses/contracts have been vetted and verified by this contract's owner.\"},\"isTerminalOf(uint256,address)\":{\"notice\":\"Check if a specified project uses a specified terminal.\"},\"primaryTerminalOf(uint256,address)\":{\"notice\":\"The primary terminal that a project is using to manage a specified token.\"},\"setControllerOf(uint256,address)\":{\"notice\":\"Set a project's controller. Controllers manage how terminals interact with tokens and rulesets.\"},\"setIsAllowedToSetFirstController(address,bool)\":{\"notice\":\"Add an address/contract to the list of trusted addresses which are allowed to set a first controller for projects.\"},\"setPrimaryTerminalOf(uint256,address,address)\":{\"notice\":\"Set a project's primary terminal for a particular token.\"},\"setTerminalsOf(uint256,address[])\":{\"notice\":\"Set a project's terminals.\"},\"terminalsOf(uint256)\":{\"notice\":\"For given project ID, the terminals which are currently managing that project's funds.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBDirectory.sol\":\"JBDirectory\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBDirectory.sol\":{\"keccak256\":\"0x164ccdbd7d3d67ff89934609c8e9c0340578bef327f02668483fa909b82d4c74\",\"urls\":[\"bzz-raw://7c17e1f8b916022b3997654834a8167875a8e82279b2a937b8949e36b9ff838e\",\"dweb:/ipfs/QmYbKb1JzK22tEENfaf1pHMx8pGkTowMEfrcYYDDpfvdjC\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A" + ], + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6040516331a9108f60e11b81526004810184905261030b907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "owner": "The address that will own the contract.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers." + } + }, + "isTerminalOf(uint256,address)": { + "params": { + "projectId": "The ID of the project to check for the terminal.", + "terminal": "The address of the terminal to check for." + }, + "returns": { + "_0": "A flag indicating whether or not the specified terminal is a terminal of the specified project." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "primaryTerminalOf(uint256,address)": { + "details": "The zero address is returned if a terminal isn't found for the specified token.", + "params": { + "projectId": "The ID of the project to get the primary terminal of.", + "token": "The token the terminal accepts." + }, + "returns": { + "_0": "The address of the primary terminal for the specified project and token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "setControllerOf(uint256,address)": { + "details": "A controller can be set if:- The project's ruleset allows setting the controller, and the message sender is the project owner or an operator with the `SET_CONTROLLER` permission from them.- OR the message sender is the project's current controller.- OR an allowedlisted address is setting a controller for a project that doesn't already have a controller.", + "params": { + "controller": "The address of the new controller to set for the project.", + "projectId": "The ID of the project to set the controller of." + } + }, + "setIsAllowedToSetFirstController(address,bool)": { + "details": "Only this contract's owner can call this function.These addresses are known and vetted controllers as well as contracts designed to launch new projects.A project can set its own controller without being on the allow list.If you would like an address/contract allowlisted, please reach out to the contract owner.", + "params": { + "addr": "The address to allow or not allow.", + "flag": "Whether the address is allowed or not allowed to set first controllers for projects. Use `true` to allow and `false` to not allow." + } + }, + "setPrimaryTerminalOf(uint256,address,address)": { + "details": "The primary terminal is where a token should be routed to by default.This is useful in case a project has several terminals connected for a particular token.If setting a newly added terminal and the ruleset doesn't allow new terminals, the caller must be the current controller.", + "params": { + "projectId": "The ID of the project a primary token is being set for.", + "terminal": "The terminal to make the primary terminal for the project and token.", + "token": "The token to set the primary terminal for." + } + }, + "setTerminalsOf(uint256,address[])": { + "details": "Only a project's owner, an operator with the `SET_TERMINALS` permission from the owner, or the project's controller can set its terminals.Unless the caller is the project's controller, the project's ruleset must allow setting terminals.", + "params": { + "projectId": "The ID of the project to set terminals for.", + "terminals": "An array of terminal addresses to set for the project." + } + }, + "terminalsOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the terminals of." + }, + "returns": { + "_0": "An array of terminal addresses." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "controllerOf(uint256)": { + "notice": "The controller, which dictates how terminals interact with tokens and rulesets, for a given project ID." + }, + "isAllowedToSetFirstController(address)": { + "notice": "Addresses allowed to set a project's first controller on their behalf. These addresses/contracts have been vetted and verified by this contract's owner." + }, + "isTerminalOf(uint256,address)": { + "notice": "Check if a specified project uses a specified terminal." + }, + "primaryTerminalOf(uint256,address)": { + "notice": "The primary terminal that a project is using to manage a specified token." + }, + "setControllerOf(uint256,address)": { + "notice": "Set a project's controller. Controllers manage how terminals interact with tokens and rulesets." + }, + "setIsAllowedToSetFirstController(address,bool)": { + "notice": "Add an address/contract to the list of trusted addresses which are allowed to set a first controller for projects." + }, + "setPrimaryTerminalOf(uint256,address,address)": { + "notice": "Set a project's primary terminal for a particular token." + }, + "setTerminalsOf(uint256,address[])": { + "notice": "Set a project's terminals." + }, + "terminalsOf(uint256)": { + "notice": "For given project ID, the terminals which are currently managing that project's funds." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBDirectory.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBFeelessAddresses.json b/deployments/nana-core/optimism_sepolia/JBFeelessAddresses.json new file mode 100644 index 00000000..206b84ef --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBFeelessAddresses.json @@ -0,0 +1,529 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBFeelessAddresses", + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isFeeless", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setFeelessAddress", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetFeelessAddress", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "isFeeless", + "type": "bool", + "indexed": true, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "contractAddress": null, + "cumulativeGasUsed": "10405018", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000253", + "gasUsed": "9790655", + "hash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "index": 7, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 12, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x784b7dfeb7d4ed0c7ced9de3602a09e6c777828e1add8d80d512761c9c97d2ca" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 13, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 14, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 15, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 16, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 17, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 18, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 19, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 20, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 21, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 22, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 29, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 30, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 31, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 32, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040020000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000800000000400100800000000200000000000000000000804000000020004000081010000000000000000000020208400000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"isFeeless\",\"type\":\"bool\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetFeelessAddress\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isFeeless\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setFeelessAddress\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"owner\":\"The address that will own this contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setFeelessAddress(address,bool)\":{\"details\":\"Only the owner of this contract can set addresses as feeless or not feeless.Feeless addresses can receive payouts without incurring a fee.Feeless addresses can use the surplus allowance without incurring a fee.Feeless addresses can be the beneficary of redemptions without incurring a fee.\",\"params\":{\"addr\":\"The address to make feeless or not feeless.\",\"flag\":\"A flag indicating whether the `address` should be made feeless or not feeless.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isFeeless(address)\":{\"notice\":\"Feeless addresses for this terminal.\"},\"setFeelessAddress(address,bool)\":{\"notice\":\"Sets an address as feeless or not feeless for this terminal.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBFeelessAddresses.sol\":\"JBFeelessAddresses\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBFeelessAddresses.sol\":{\"keccak256\":\"0x860d0650289bd755ecd25b7be4b2f0bb7b8432e267da9437bb928322d3c217a7\",\"urls\":[\"bzz-raw://0fa76cec4171ad3dfadb8228773300c41068d1892926a47c0766fa37012ca9db\",\"dweb:/ipfs/QmSEbFm4kmBrVNRBgw6bmhwwPVNQxcm3dYrZhJsaxDEsVN\"],\"license\":\"MIT\"},\"src/interfaces/IJBFeelessAddresses.sol\":{\"keccak256\":\"0xe5df42cfa71c5fa41b905c122de5825df13c2aab2f9cc4cf4bafa331dd69c27e\",\"urls\":[\"bzz-raw://3773bf3b42cc57d1e4086147e52135ff1dbff4309c45ca0398f821dfaa071563\",\"dweb:/ipfs/QmXUEJssHaxYKfV33tMZGf81JTR5a5yxEVshzNus84xLuT\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "owner": "The address that will own this contract." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "setFeelessAddress(address,bool)": { + "details": "Only the owner of this contract can set addresses as feeless or not feeless.Feeless addresses can receive payouts without incurring a fee.Feeless addresses can use the surplus allowance without incurring a fee.Feeless addresses can be the beneficary of redemptions without incurring a fee.", + "params": { + "addr": "The address to make feeless or not feeless.", + "flag": "A flag indicating whether the `address` should be made feeless or not feeless." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "isFeeless(address)": { + "notice": "Feeless addresses for this terminal." + }, + "setFeelessAddress(address,bool)": { + "notice": "Sets an address as feeless or not feeless for this terminal." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBFeelessAddresses.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBFundAccessLimits.json b/deployments/nana-core/optimism_sepolia/JBFundAccessLimits.json new file mode 100644 index 00000000..8301c619 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBFundAccessLimits.json @@ -0,0 +1,862 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBFundAccessLimits", + "address": "0x2Fd39295dd948dfBB8Aa7e2508ea5Fc15096682b", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "payoutLimitOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "payoutLimit", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "payoutLimitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setFundAccessLimitsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "fundAccessLimitGroup", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "surplusAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "surplusAllowance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "surplusAllowancesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "SetFundAccessLimits", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "limits", + "type": "tuple", + "indexed": false, + "internalType": "struct JBFundAccessLimitGroup", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBFundAccessLimitGroup\",\"name\":\"limits\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetFundAccessLimits\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"payoutLimitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"payoutLimit\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"payoutLimitsOf\",\"outputs\":[{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroup\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setFundAccessLimitsFor\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"surplusAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"surplusAllowance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"surplusAllowancesOf\",\"outputs\":[{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"payoutLimitOf(uint256,uint256,address,address,uint256)\":{\"details\":\"The fixed point amount returned will have the same number of decimals as the specified terminal.\",\"params\":{\"currency\":\"The currency the payout limit is denominated in.\",\"projectId\":\"The ID of the project to get the payout limit of.\",\"rulesetId\":\"The ID of the ruleset the payout limit applies to.\",\"terminal\":\"The terminal the payout limit applies to.\",\"token\":\"The token the payout limit applies to.\"},\"returns\":{\"payoutLimit\":\"The payout limit, as a fixed point number with the same number of decimals as the provided terminal.\"}},\"payoutLimitsOf(uint256,uint256,address,address)\":{\"details\":\"The fixed point `amount`s of the returned structs will have the same number of decimals as the specified terminal.\",\"params\":{\"projectId\":\"The ID of the project to get the payout limits of.\",\"rulesetId\":\"The ID of the ruleset the payout limits apply to.\",\"terminal\":\"The terminal the payout limits apply to.\",\"token\":\"The token the payout limits apply to.\"},\"returns\":{\"payoutLimits\":\"The payout limits.\"}},\"setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])\":{\"details\":\"Only a project's current controller can set its fund access limits.Payout limits and surplus allowances must be specified in strictly increasing order (by currency) to prevent duplicates.\",\"params\":{\"fundAccessLimitGroup\":\"An array containing payout limits and surplus allowances for each payment terminal. Amounts are fixed point numbers using the same number of decimals as the accompanying terminal.\",\"projectId\":\"The ID of the project whose fund access limits are being set.\",\"rulesetId\":\"The ID of the ruleset that the limits will apply within.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"surplusAllowanceOf(uint256,uint256,address,address,uint256)\":{\"details\":\"The fixed point amount returned will have the same number of decimals as the specified terminal.\",\"params\":{\"currency\":\"The currency that the surplus allowance is denominated in.\",\"projectId\":\"The ID of the project to get the surplus allowance of.\",\"rulesetId\":\"The ID of the ruleset the surplus allowance applies to.\",\"terminal\":\"The terminal the surplus allowance applies to.\",\"token\":\"The token the surplus allowance applies to.\"},\"returns\":{\"surplusAllowance\":\"The surplus allowance, as a fixed point number with the same number of decimals as the provided terminal.\"}},\"surplusAllowancesOf(uint256,uint256,address,address)\":{\"details\":\"The number of decimals in the returned fixed point amount is the same as that of the specified terminal.\",\"params\":{\"projectId\":\"The ID of the project to get the surplus allowances of.\",\"rulesetId\":\"The ID of the ruleset the surplus allowances applies to.\",\"terminal\":\"The terminal the surplus allowances applies to.\",\"token\":\"The token the surplus allowances applies to.\"},\"returns\":{\"surplusAllowances\":\"The surplus allowances.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"payoutLimitOf(uint256,uint256,address,address,uint256)\":{\"notice\":\"A project's payout limit for a specific currency and a given ruleset, terminal, and token.\"},\"payoutLimitsOf(uint256,uint256,address,address)\":{\"notice\":\"A project's payout limits for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from the terminal during the ruleset is dictated by a list of payout limits. Each payout limit is in terms of its own amount and currency.\"},\"setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])\":{\"notice\":\"Sets limits for the amount of funds a project can access from its terminals during a ruleset.\"},\"surplusAllowanceOf(uint256,uint256,address,address,uint256)\":{\"notice\":\"A project's surplus allowance for a specific currency and a given ruleset, terminal, and token.\"},\"surplusAllowancesOf(uint256,uint256,address,address)\":{\"notice\":\"A project's surplus allowances for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from its surplus in a terminal during the ruleset is dictated by a list of surplus allowances. Each surplus allowance is in terms of its own amount and currency.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBFundAccessLimits.sol\":\"JBFundAccessLimits\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBFundAccessLimits.sol\":{\"keccak256\":\"0xf9217afc7b06699040803d425eb288703bd1e5f8e99edd17c8aed2abd6bc6b46\",\"urls\":[\"bzz-raw://e835efc129cb277c436005a73facb8797e3594cf607cfdd823c15449503a61cd\",\"dweb:/ipfs/QmYLKkFk99pGZD89XHvMXhvEk8DecgL6jf53RLnk8HMbQk\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "payoutLimitOf(uint256,uint256,address,address,uint256)": { + "details": "The fixed point amount returned will have the same number of decimals as the specified terminal.", + "params": { + "currency": "The currency the payout limit is denominated in.", + "projectId": "The ID of the project to get the payout limit of.", + "rulesetId": "The ID of the ruleset the payout limit applies to.", + "terminal": "The terminal the payout limit applies to.", + "token": "The token the payout limit applies to." + }, + "returns": { + "payoutLimit": "The payout limit, as a fixed point number with the same number of decimals as the provided terminal." + } + }, + "payoutLimitsOf(uint256,uint256,address,address)": { + "details": "The fixed point `amount`s of the returned structs will have the same number of decimals as the specified terminal.", + "params": { + "projectId": "The ID of the project to get the payout limits of.", + "rulesetId": "The ID of the ruleset the payout limits apply to.", + "terminal": "The terminal the payout limits apply to.", + "token": "The token the payout limits apply to." + }, + "returns": { + "payoutLimits": "The payout limits." + } + }, + "setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])": { + "details": "Only a project's current controller can set its fund access limits.Payout limits and surplus allowances must be specified in strictly increasing order (by currency) to prevent duplicates.", + "params": { + "fundAccessLimitGroup": "An array containing payout limits and surplus allowances for each payment terminal. Amounts are fixed point numbers using the same number of decimals as the accompanying terminal.", + "projectId": "The ID of the project whose fund access limits are being set.", + "rulesetId": "The ID of the ruleset that the limits will apply within." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "surplusAllowanceOf(uint256,uint256,address,address,uint256)": { + "details": "The fixed point amount returned will have the same number of decimals as the specified terminal.", + "params": { + "currency": "The currency that the surplus allowance is denominated in.", + "projectId": "The ID of the project to get the surplus allowance of.", + "rulesetId": "The ID of the ruleset the surplus allowance applies to.", + "terminal": "The terminal the surplus allowance applies to.", + "token": "The token the surplus allowance applies to." + }, + "returns": { + "surplusAllowance": "The surplus allowance, as a fixed point number with the same number of decimals as the provided terminal." + } + }, + "surplusAllowancesOf(uint256,uint256,address,address)": { + "details": "The number of decimals in the returned fixed point amount is the same as that of the specified terminal.", + "params": { + "projectId": "The ID of the project to get the surplus allowances of.", + "rulesetId": "The ID of the ruleset the surplus allowances applies to.", + "terminal": "The terminal the surplus allowances applies to.", + "token": "The token the surplus allowances applies to." + }, + "returns": { + "surplusAllowances": "The surplus allowances." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "payoutLimitOf(uint256,uint256,address,address,uint256)": { + "notice": "A project's payout limit for a specific currency and a given ruleset, terminal, and token." + }, + "payoutLimitsOf(uint256,uint256,address,address)": { + "notice": "A project's payout limits for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from the terminal during the ruleset is dictated by a list of payout limits. Each payout limit is in terms of its own amount and currency." + }, + "setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])": { + "notice": "Sets limits for the amount of funds a project can access from its terminals during a ruleset." + }, + "surplusAllowanceOf(uint256,uint256,address,address,uint256)": { + "notice": "A project's surplus allowance for a specific currency and a given ruleset, terminal, and token." + }, + "surplusAllowancesOf(uint256,uint256,address,address)": { + "notice": "A project's surplus allowances for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from its surplus in a terminal during the ruleset is dictated by a list of surplus allowances. Each surplus allowance is in terms of its own amount and currency." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBFundAccessLimits.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBMultiTerminal.json b/deployments/nana-core/optimism_sepolia/JBMultiTerminal.json new file mode 100644 index 00000000..c1e2ead9 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBMultiTerminal.json @@ -0,0 +1,2183 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBMultiTerminal", + "address": "0x12bB7Bcc941b2E5cCef740d0e4317a5B35717D30", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "splits", + "type": "address", + "internalType": "contract IJBSplits" + }, + { + "name": "store", + "type": "address", + "internalType": "contract IJBTerminalStore" + }, + { + "name": "feelessAddresses", + "type": "address", + "internalType": "contract IJBFeelessAddresses" + }, + { + "name": "permit2", + "type": "address", + "internalType": "contract IPermit2" + }, + { + "name": "trustedForwarder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FEE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FEELESS_ADDRESSES", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBFeelessAddresses" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMIT2", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPermit2" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SPLITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBSplits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STORE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTerminalStore" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accountingContextForTokenOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accountingContextsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addAccountingContextsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokens", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addToBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "shouldReturnHeldFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "currentSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "executePayout", + "inputs": [ + { + "name": "split", + "type": "tuple", + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "originalMessageSender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "netPayoutAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeProcessFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "feeTerminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "heldFeesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct JBFee[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "unlockTimestamp", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTrustedForwarder", + "inputs": [ + { + "name": "forwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "migrateBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pay", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "minReturnedTokens", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "processHeldFeesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redeemTokensOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenToReclaim", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensReclaimed", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "reclaimAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "sendPayoutsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "trustedForwarder", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "useAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensPaidOut", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddToBalance", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "unlockedFees", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FeeReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "feeProjectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HoldFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HookAfterRecordPay", + "inputs": [ + { + "name": "hook", + "type": "address", + "indexed": true, + "internalType": "contract IJBPayHook" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAfterPayRecordedContext", + "components": [ + { + "name": "payer", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "forwardedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectTokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "hookMetadata", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "payerMetadata", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "specificationAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HookAfterRecordRedeem", + "inputs": [ + { + "name": "hook", + "type": "address", + "indexed": true, + "internalType": "contract IJBRedeemHook" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAfterRedeemRecordedContext", + "components": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reclaimedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "forwardedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "hookMetadata", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "redeemerMetadata", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "specificationAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Pay", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "payer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PayoutReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProcessFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "wasHeld", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RedeemTokens", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "holder", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reclaimedAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReturnHeldFees", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "returnedFees", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "leftoverAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendPayoutToSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "netAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendPayouts", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryDistributionAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetAccountingContext", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UseAllowance", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "netAmountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ACCOUNTING_CONTEXT_ALREADY_SET", + "inputs": [] + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_PAYOUT_AMOUNT", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_RECLAIM_AMOUNT", + "inputs": [] + }, + { + "type": "error", + "name": "NO_MSG_VALUE_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "OVERFLOW_ALERT", + "inputs": [] + }, + { + "type": "error", + "name": "PERMIT_ALLOWANCE_NOT_ENOUGH", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TERMINAL_TOKENS_INCOMPATIBLE", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_ACCEPTED", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "UNDER_MIN_RETURNED_TOKENS", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "contractAddress": null, + "cumulativeGasUsed": "5962538", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "5665347", + "hash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "index": 3, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 6, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x227524cd266ffd0d4791158ac3765dbbf9bfd3e5213d0e3b000973d58f753b91" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x00000000000000000000000012bb7bcc941b2e5ccef740d0e4317a5b35717d30", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x000000000000000000000000000000000000000000000000000000000000000f", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x", + "index": 10, + "topics": [ + "0x4383d976757d67ca920616be0b6430a681ea9d3dcce8d6d61d4603ca4a9bff63", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + } + ], + "logsBloom": "0x00000000080010000008000000080001000000000008000000000000004000000040008000000000000000000040000000000000000000000000000000000000000000000000200400000008020000000000000020000000000000000000000000000000000000000000000000000000000000100020000000000008000000000001000000000080000100000000000000000000000000000000804000000000084000800010000000000000000000020200000000000000000000000006000000000000000000200000000008000000000000000000000000000000000000000000000000000008000000000000000200000000000000000000000008000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBSplits\",\"name\":\"splits\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminalStore\",\"name\":\"store\",\"type\":\"address\"},{\"internalType\":\"contract IJBFeelessAddresses\",\"name\":\"feelessAddresses\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ACCOUNTING_CONTEXT_ALREADY_SET\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_PAYOUT_AMOUNT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_RECLAIM_AMOUNT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NO_MSG_VALUE_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OVERFLOW_ALERT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PERMIT_ALLOWANCE_NOT_ENOUGH\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TERMINAL_TOKENS_INCOMPATIBLE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_ACCEPTED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNDER_MIN_RETURNED_TOKENS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"unlockedFees\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddToBalance\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"feeProjectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"FeeReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HoldFee\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBPayHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAfterPayRecordedContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"amount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"forwardedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"hookMetadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"payerMetadata\",\"type\":\"bytes\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"specificationAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HookAfterRecordPay\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBRedeemHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAfterRedeemRecordedContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"reclaimedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"forwardedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"hookMetadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"redeemerMetadata\",\"type\":\"bytes\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"specificationAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HookAfterRecordRedeem\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"to\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MigrateTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Pay\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"PayoutReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"wasHeld\",\"type\":\"bool\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ProcessFee\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"reclaimedAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"RedeemTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"returnedFees\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"leftoverAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ReturnHeldFees\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"netAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendPayoutToSplit\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryDistributionAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendPayouts\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetAccountingContext\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"netAmountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"UseAllowance\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FEELESS_ADDRESSES\",\"outputs\":[{\"internalType\":\"contract IJBFeelessAddresses\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMIT2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"SPLITS\",\"outputs\":[{\"internalType\":\"contract IJBSplits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"STORE\",\"outputs\":[{\"internalType\":\"contract IJBTerminalStore\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"accountingContextForTokenOf\",\"outputs\":[{\"internalType\":\"struct JBAccountingContext\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"accountingContextsOf\",\"outputs\":[{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"addAccountingContextsFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"shouldReturnHeldFees\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"addToBalanceOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalMessageSender\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executePayout\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"netPayoutAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"feeTerminal\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executeProcessFee\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"heldFeesOf\",\"outputs\":[{\"internalType\":\"struct JBFee[]\",\"name\":\"\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"to\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minReturnedTokens\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"pay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"processHeldFeesOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenToReclaim\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensReclaimed\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"redeemTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reclaimAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensPaidOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"sendPayoutsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensPaidOut\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"useAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountingContextForTokenOf(uint256,address)\":{\"details\":\"See the `JBAccountingContext` struct for more information.\",\"params\":{\"projectId\":\"The ID of the project to get token accounting context of.\",\"token\":\"The token to check the accounting context of.\"},\"returns\":{\"_0\":\"The token's accounting context for the token.\"}},\"accountingContextsOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the accepted tokens of.\"},\"returns\":{\"_0\":\"tokenContexts The accounting contexts of the accepted tokens.\"}},\"addAccountingContextsFor(uint256,address[])\":{\"details\":\"Only a project's owner, an operator with the `SET_ACCOUNTING_CONTEXT` permission from that owner, or a project's controller can add accounting contexts for the project.\",\"params\":{\"projectId\":\"The ID of the project having to add accounting contexts for.\",\"tokens\":\"The tokens to add accounting contexts for.\"}},\"addToBalanceOf(uint256,address,uint256,bool,string,bytes)\":{\"details\":\"Adding to balance can unlock held fees if `shouldUnlockHeldFees` is true.\",\"params\":{\"amount\":\"The amount of tokens to add to the balance, as a fixed point number with the same number of decimals as this terminal. If this is a native token terminal, this is ignored and `msg.value` is used instead.\",\"memo\":\"A memo to pass along to the emitted event.\",\"metadata\":\"Extra data to pass along to the emitted event.\",\"projectId\":\"The ID of the project to add funds to the balance of.\",\"shouldReturnHeldFees\":\"A flag indicating if held fees should be returned based on the amount being added.\",\"token\":\"The token being added to the balance.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"feelessAddresses\":\"A contract that stores addresses that shouldn't incur fees when being paid towards or from.\",\"permissions\":\"A contract storing permissions.\",\"permit2\":\"A permit2 utility.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\",\"splits\":\"A contract that stores splits for each project.\",\"store\":\"A contract that stores the terminal's data.\"}},\"currentSurplusOf(uint256,uint256,uint256)\":{\"details\":\"This total surplus only includes tokens that the project accepts (as returned by `accountingContextsOf(...)`).\",\"params\":{\"currency\":\"The currency to express the returned value in terms of.\",\"decimals\":\"The number of decimals to include in the fixed point returned value.\",\"projectId\":\"The ID of the project to get the current total surplus of.\"},\"returns\":{\"_0\":\"The current surplus amount the project has in this terminal, in terms of `currency` and with the specified number of decimals.\"}},\"executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)\":{\"details\":\"Only accepts calls from this terminal itself.\",\"params\":{\"amount\":\"The total amount being paid to the split, as a fixed point number with the same number of decimals as this terminal.\",\"projectId\":\"The ID of the project the split belongs to.\",\"split\":\"The split to pay.\",\"token\":\"The address of the token being paid to the split.\"},\"returns\":{\"netPayoutAmount\":\"The amount sent to the split after subtracting fees.\"}},\"executeProcessFee(uint256,address,uint256,address,address)\":{\"details\":\"Only accepts calls from this terminal itself.\",\"params\":{\"amount\":\"The fee amount, as a fixed point number with 18 decimals.\",\"beneficiary\":\"The address to mint tokens to (from the project which receives fees), and pass along to the ruleset's data hook and pay hook if applicable.\",\"feeTerminal\":\"The terminal that'll receive the fees.\",\"projectId\":\"The ID of the project paying the fee.\",\"token\":\"The token the fee is being paid in.\"}},\"heldFeesOf(uint256,address)\":{\"details\":\"Projects can temporarily hold fees and unlock them later by adding funds to the project's balance.Held fees can be processed at any time by this terminal's owner.\",\"params\":{\"projectId\":\"The ID of the project that is holding fees.\",\"token\":\"The token that the fees are held in.\"}},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"migrateBalanceOf(uint256,address,address)\":{\"details\":\"Only a project's owner or an operator with the `MIGRATE_TERMINAL` permission from that owner can migrate the project's terminal.\",\"params\":{\"projectId\":\"The ID of the project being migrated.\",\"to\":\"The terminal contract being migrated to, which will receive the project's funds and operations.\",\"token\":\"The address of the token being migrated.\"},\"returns\":{\"balance\":\"The amount of funds that were migrated, as a fixed point number with the same amount of decimals as this terminal.\"}},\"pay(uint256,address,uint256,address,uint256,string,bytes)\":{\"params\":{\"amount\":\"The amount of terminal tokens being received, as a fixed point number with the same number of decimals as this terminal. If this terminal's token is native, this is ignored and `msg.value` is used in its place.\",\"beneficiary\":\"The address to mint tokens to, and pass along to the ruleset's data hook and pay hook if applicable.\",\"memo\":\"A memo to pass along to the emitted event.\",\"metadata\":\"Bytes to pass along to the emitted event, as well as the data hook and pay hook if applicable.\",\"minReturnedTokens\":\"The minimum number of project tokens expected in return for this payment, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the payment is reverted.\",\"projectId\":\"The ID of the project being paid.\",\"token\":\"The token being paid.\"},\"returns\":{\"beneficiaryTokenCount\":\"The number of tokens minted to the beneficiary, as a fixed point number with 18 decimals.\"}},\"processHeldFeesOf(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project to process held fees for.\",\"token\":\"The token to process held fees for.\"}},\"redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)\":{\"details\":\"Only a token's holder or an operator with the `REDEEM_TOKENS` permission from that holder can redeem those tokens.\",\"params\":{\"beneficiary\":\"The address to send the reclaimed terminal tokens to, and to pass along to the ruleset's data hook and redeem hook if applicable.\",\"holder\":\"The account whose tokens are being redeemed.\",\"metadata\":\"Bytes to send along to the emitted event, as well as the data hook and redeem hook if applicable.\",\"minTokensReclaimed\":\"The minimum number of terminal tokens expected in return, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the redemption is reverted.\",\"projectId\":\"The ID of the project the project tokens belong to.\",\"redeemCount\":\"The number of project tokens to redeem, as a fixed point number with 18 decimals.\",\"tokenToReclaim\":\"The token being reclaimed.\"},\"returns\":{\"reclaimAmount\":\"The amount of terminal tokens that the project tokens were redeemed for, as a fixed point number with 18 decimals.\"}},\"sendPayoutsOf(uint256,address,uint256,uint256,uint256)\":{\"details\":\"If the percentages of the splits in the project's payout split group do not add up to 100%, the remainder is sent to the project's owner.Anyone can send payouts on a project's behalf. Projects can include a wildcard split (a split with no `hook`, `projectId`, or `beneficiary`) to send funds to the `_msgSender()` which calls this function. This can be used to incentivize calling this function.payouts sent to addresses which aren't feeless incur the protocol fee.Payouts a projects don't incur fees if its terminal is feeless.\",\"params\":{\"amount\":\"The total number of terminal tokens to send, as a fixed point number with same number of decimals as this terminal.\",\"currency\":\"The expected currency of the payouts being sent. Must match the currency of one of the project's current ruleset's payout limits.\",\"minTokensPaidOut\":\"The minimum number of terminal tokens that the `amount` should be worth (if expressed in terms of this terminal's currency), as a fixed point number with the same number of decimals as this terminal. If the amount of tokens paid out would be less than this amount, the send is reverted.\",\"projectId\":\"The ID of the project having its payouts sent.\",\"token\":\"The token being sent.\"},\"returns\":{\"amountPaidOut\":\"The total amount paid out.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)\":{\"details\":\"Only a project's owner or an operator with the `USE_ALLOWANCE` permission from that owner can use the surplus allowance.Incurs the protocol fee unless the caller is a feeless address.\",\"params\":{\"amount\":\"The amount of terminal tokens to use from the project's current surplus allowance, as a fixed point number with the same amount of decimals as this terminal.\",\"beneficiary\":\"The address to send the surplus funds to.\",\"currency\":\"The expected currency of the amount being paid out. Must match the currency of one of the project's current ruleset's surplus allowances.\",\"memo\":\"A memo to pass along to the emitted event.\",\"minTokensPaidOut\":\"The minimum number of terminal tokens that should be used from the surplus allowance (including fees), as a fixed point number with 18 decimals. If the amount of surplus used would be less than this amount, the transaction is reverted.\",\"projectId\":\"The ID of the project to use the surplus allowance of.\",\"token\":\"The token being paid out from the surplus.\"},\"returns\":{\"amountPaidOut\":\"The number of tokens that were sent to the beneficiary, as a fixed point number with the same amount of decimals as the terminal.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for PROJECTS.\"},\"FEE()\":{\"notice\":\"The fee percent (out of `JBConstants.MAX_FEE`).\"},\"FEELESS_ADDRESSES()\":{\"notice\":\"The contract that stores addresses that shouldn't incur fees when being paid towards or from.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PERMIT2()\":{\"notice\":\"The permit2 utility.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"SPLITS()\":{\"notice\":\"The contract that stores splits for each project.\"},\"STORE()\":{\"notice\":\"The contract that stores and manages the terminal's data.\"},\"accountingContextForTokenOf(uint256,address)\":{\"notice\":\"A project's accounting context for a token.\"},\"accountingContextsOf(uint256)\":{\"notice\":\"The tokens accepted by a project.\"},\"addAccountingContextsFor(uint256,address[])\":{\"notice\":\"Adds accounting contexts for a project to this terminal so the project can begin accepting the tokens in those contexts.\"},\"addToBalanceOf(uint256,address,uint256,bool,string,bytes)\":{\"notice\":\"Adds funds to a project's balance without minting tokens.\"},\"currentSurplusOf(uint256,uint256,uint256)\":{\"notice\":\"Gets the total current surplus amount in this terminal for a project, in terms of a given currency.\"},\"executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)\":{\"notice\":\"Executes a payout to a split.\"},\"executeProcessFee(uint256,address,uint256,address,address)\":{\"notice\":\"Process a specified amount of fees for a project.\"},\"heldFeesOf(uint256,address)\":{\"notice\":\"Fees that are being held for a project.\"},\"migrateBalanceOf(uint256,address,address)\":{\"notice\":\"Migrate a project's funds and operations to a new terminal that accepts the same token type.\"},\"pay(uint256,address,uint256,address,uint256,string,bytes)\":{\"notice\":\"Pay a project with tokens.\"},\"processHeldFeesOf(uint256,address)\":{\"notice\":\"Process any fees that are being held for the project.\"},\"redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)\":{\"notice\":\"Holders can redeem a project's tokens to reclaim some of that project's surplus tokens, or to trigger rules determined by the current ruleset's data hook and redeem hook.\"},\"sendPayoutsOf(uint256,address,uint256,uint256,uint256)\":{\"notice\":\"Sends payouts to a project's current payout split group, according to its ruleset, up to its current payout limit.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)\":{\"notice\":\"Allows a project to pay out funds from its surplus up to the current surplus allowance.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBMultiTerminal.sol\":\"JBMultiTerminal\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xac3d50e321a48a40b4496970ce725900f13aeb2255b7c1203f5adbe98c4a911a\",\"urls\":[\"bzz-raw://1d7b235b578347dce2d831a76f122e820a7db7e73fd2e47f13bafdcd61c5b066\",\"dweb:/ipfs/QmVAELwambfJa55HfiCoz1kFFh7iYwRYeW5x8si6AFM4iX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"],\"license\":\"MIT\"},\"src/JBMultiTerminal.sol\":{\"keccak256\":\"0xaff1c40be20d39feb7f88fd47571592f19577cf20bd6266d6cd772bc4c4b4192\",\"urls\":[\"bzz-raw://b66818b95b17dd216fbba3bff3a31aea18802fb4203541eed097588530ffcb22\",\"dweb:/ipfs/QmcpXKqXQN8xT5BhTAqAec8hTqVkMehf2mJRuPMpdiamce\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFeelessAddresses.sol\":{\"keccak256\":\"0xe5df42cfa71c5fa41b905c122de5825df13c2aab2f9cc4cf4bafa331dd69c27e\",\"urls\":[\"bzz-raw://3773bf3b42cc57d1e4086147e52135ff1dbff4309c45ca0398f821dfaa071563\",\"dweb:/ipfs/QmXUEJssHaxYKfV33tMZGf81JTR5a5yxEVshzNus84xLuT\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTerminalStore.sol\":{\"keccak256\":\"0x81d5eb6c877f535143d26d2bef7be97dabf95122db4b1c6fdd0adc32ddc704ca\",\"urls\":[\"bzz-raw://551ab223b3498a20ae7e2bb3da7169ffa2c0a9ab3bd22c7387b19d69915809a4\",\"dweb:/ipfs/Qma2n7QtVAHmB7pWQavQnSBCouAfh171KezhYbNNmdT3wH\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBFeeTerminal.sol\":{\"keccak256\":\"0x9bda3d88d71167aa04a6184885341a70336f524ec13e3a06eb6a2c66acd816dc\",\"urls\":[\"bzz-raw://b06a3485c0b3ec2e66b3443263967d73164caf25f7d340f8bea229a700d505ef\",\"dweb:/ipfs/QmRPFfGZs5z1dNKjUixx6sEUavtVNuv9b3XVV45VPP2NHc\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBMultiTerminal.sol\":{\"keccak256\":\"0x9151efa71b127bc60aecfcf71264176e1af35cc7d6e27bdf585df5ef8b1fc687\",\"urls\":[\"bzz-raw://7a5143dbc5e547cf41969787ff7ba20552d33789938dcad7423565891ed55f4f\",\"dweb:/ipfs/QmTJNLgywfnNVLYQygkcZT3uEPKUpqXuRyYuc2Cs38tm6d\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBPayoutTerminal.sol\":{\"keccak256\":\"0x69b290ddc214def38e69711ff2cfdf1c571d33653b25520efd98469f6b49c7fa\",\"urls\":[\"bzz-raw://93703189aa74008878f20d2917e14bc6c1572ebd05a5f1e4e28bf255603d86af\",\"dweb:/ipfs/QmTpopL7jfS3GJNgTjTBcSaFcdGGuynQPwuMZR6UjJXJjh\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBPermitTerminal.sol\":{\"keccak256\":\"0x9efd208aad91b74041850bfeef658b0cb64e756bf00cb811ea758fb6da0d1e76\",\"urls\":[\"bzz-raw://16160e253dfd77c4c00b56b34349519a60def039319ac4a6ae977e0fd409ad14\",\"dweb:/ipfs/QmQhjX4HzeMT1x9JixjpmusxBYiDxr9oh8ySj4fLwjnJoK\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBRedeemTerminal.sol\":{\"keccak256\":\"0xf43f5c6fb4d2de1b547ecfbf662f48c5cbd7d0bf79c4b784e566cb4b71ad7da7\",\"urls\":[\"bzz-raw://0ded83cc745fab54a035614b845a984933a57056ee27adbd60f5896f47015270\",\"dweb:/ipfs/QmWH19MehMdwgnprq6M3JmZVCaLQSd25ZPwhA5tap2PEKL\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBFees.sol\":{\"keccak256\":\"0xa5e36ac6f9da8edd37e0b8bf9e9a8ed3f30a4c87ae863a18cf202adf464d0cd1\",\"urls\":[\"bzz-raw://e2e7730f815932064322989b29352062b54ad5f3086a66fdd57d8842bfd60ac1\",\"dweb:/ipfs/QmbxvkJA2cKYy1UADJBrowRvaBSAAG46XGnQv6wuy4cmZW\"],\"license\":\"MIT\"},\"src/libraries/JBMetadataResolver.sol\":{\"keccak256\":\"0xdbe40563934ac1618c9ba15f92d3efc47383534b5b8889bf5aae092927be9e87\",\"urls\":[\"bzz-raw://630534d226e7b1f86907f48c70b0d5593ad5682936330fe2737082e4383e8a56\",\"dweb:/ipfs/QmfTVQ6M3eVYBJRZH3693Axo7yBoR5mr2YvHHwx6nvJojZ\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFee.sol\":{\"keccak256\":\"0x90531b42853517d6e1d1955966ee6ffef38db901cb96770cfcbb6955f760aab0\",\"urls\":[\"bzz-raw://0fc1971f6fba2ec6092544d3eeea0121a078d9c7967a006029d1ef9d87bda805\",\"dweb:/ipfs/QmYyhRHKGCbSETczF848BHJfqMMGTQw5TeFeTu2nbbHX33\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSingleAllowanceContext.sol\":{\"keccak256\":\"0x5bcd5b3abafe9137ee451b112fcac473b4d48858544279d38d0c56dea5271f44\",\"urls\":[\"bzz-raw://5f17a870c2f1797a18918ab3dc6f404f0224d9e415815c708654a17686cd62c0\",\"dweb:/ipfs/QmWMDffMMrj7ZXquTHSQt8VQm5owo94BdPpJ93NfSp2jrn\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "0xa0D811360b0d49be8d33309D6eAE03D072E30312", + "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "0xB2b5841DBeF766d4b521221732F9B618fCf34A87" + ], + "bytecode": "0x6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033", + "deployedBytecode": "0x6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da581565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031281565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc84181565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba381565b34801561047157600080fd5b507f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876101d4565b3480156104a457600080fd5b506101d47f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8411663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da90911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8419091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303126001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba316906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba36001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8411663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303121691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303129091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a8716148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da90911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8416001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da516906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "accountingContextForTokenOf(uint256,address)": { + "details": "See the `JBAccountingContext` struct for more information.", + "params": { + "projectId": "The ID of the project to get token accounting context of.", + "token": "The token to check the accounting context of." + }, + "returns": { + "_0": "The token's accounting context for the token." + } + }, + "accountingContextsOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the accepted tokens of." + }, + "returns": { + "_0": "tokenContexts The accounting contexts of the accepted tokens." + } + }, + "addAccountingContextsFor(uint256,address[])": { + "details": "Only a project's owner, an operator with the `SET_ACCOUNTING_CONTEXT` permission from that owner, or a project's controller can add accounting contexts for the project.", + "params": { + "projectId": "The ID of the project having to add accounting contexts for.", + "tokens": "The tokens to add accounting contexts for." + } + }, + "addToBalanceOf(uint256,address,uint256,bool,string,bytes)": { + "details": "Adding to balance can unlock held fees if `shouldUnlockHeldFees` is true.", + "params": { + "amount": "The amount of tokens to add to the balance, as a fixed point number with the same number of decimals as this terminal. If this is a native token terminal, this is ignored and `msg.value` is used instead.", + "memo": "A memo to pass along to the emitted event.", + "metadata": "Extra data to pass along to the emitted event.", + "projectId": "The ID of the project to add funds to the balance of.", + "shouldReturnHeldFees": "A flag indicating if held fees should be returned based on the amount being added.", + "token": "The token being added to the balance." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "feelessAddresses": "A contract that stores addresses that shouldn't incur fees when being paid towards or from.", + "permissions": "A contract storing permissions.", + "permit2": "A permit2 utility.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers.", + "splits": "A contract that stores splits for each project.", + "store": "A contract that stores the terminal's data." + } + }, + "currentSurplusOf(uint256,uint256,uint256)": { + "details": "This total surplus only includes tokens that the project accepts (as returned by `accountingContextsOf(...)`).", + "params": { + "currency": "The currency to express the returned value in terms of.", + "decimals": "The number of decimals to include in the fixed point returned value.", + "projectId": "The ID of the project to get the current total surplus of." + }, + "returns": { + "_0": "The current surplus amount the project has in this terminal, in terms of `currency` and with the specified number of decimals." + } + }, + "executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)": { + "details": "Only accepts calls from this terminal itself.", + "params": { + "amount": "The total amount being paid to the split, as a fixed point number with the same number of decimals as this terminal.", + "projectId": "The ID of the project the split belongs to.", + "split": "The split to pay.", + "token": "The address of the token being paid to the split." + }, + "returns": { + "netPayoutAmount": "The amount sent to the split after subtracting fees." + } + }, + "executeProcessFee(uint256,address,uint256,address,address)": { + "details": "Only accepts calls from this terminal itself.", + "params": { + "amount": "The fee amount, as a fixed point number with 18 decimals.", + "beneficiary": "The address to mint tokens to (from the project which receives fees), and pass along to the ruleset's data hook and pay hook if applicable.", + "feeTerminal": "The terminal that'll receive the fees.", + "projectId": "The ID of the project paying the fee.", + "token": "The token the fee is being paid in." + } + }, + "heldFeesOf(uint256,address)": { + "details": "Projects can temporarily hold fees and unlock them later by adding funds to the project's balance.Held fees can be processed at any time by this terminal's owner.", + "params": { + "projectId": "The ID of the project that is holding fees.", + "token": "The token that the fees are held in." + } + }, + "isTrustedForwarder(address)": { + "details": "Indicates whether any particular address is the trusted forwarder." + }, + "migrateBalanceOf(uint256,address,address)": { + "details": "Only a project's owner or an operator with the `MIGRATE_TERMINAL` permission from that owner can migrate the project's terminal.", + "params": { + "projectId": "The ID of the project being migrated.", + "to": "The terminal contract being migrated to, which will receive the project's funds and operations.", + "token": "The address of the token being migrated." + }, + "returns": { + "balance": "The amount of funds that were migrated, as a fixed point number with the same amount of decimals as this terminal." + } + }, + "pay(uint256,address,uint256,address,uint256,string,bytes)": { + "params": { + "amount": "The amount of terminal tokens being received, as a fixed point number with the same number of decimals as this terminal. If this terminal's token is native, this is ignored and `msg.value` is used in its place.", + "beneficiary": "The address to mint tokens to, and pass along to the ruleset's data hook and pay hook if applicable.", + "memo": "A memo to pass along to the emitted event.", + "metadata": "Bytes to pass along to the emitted event, as well as the data hook and pay hook if applicable.", + "minReturnedTokens": "The minimum number of project tokens expected in return for this payment, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the payment is reverted.", + "projectId": "The ID of the project being paid.", + "token": "The token being paid." + }, + "returns": { + "beneficiaryTokenCount": "The number of tokens minted to the beneficiary, as a fixed point number with 18 decimals." + } + }, + "processHeldFeesOf(uint256,address)": { + "params": { + "projectId": "The ID of the project to process held fees for.", + "token": "The token to process held fees for." + } + }, + "redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)": { + "details": "Only a token's holder or an operator with the `REDEEM_TOKENS` permission from that holder can redeem those tokens.", + "params": { + "beneficiary": "The address to send the reclaimed terminal tokens to, and to pass along to the ruleset's data hook and redeem hook if applicable.", + "holder": "The account whose tokens are being redeemed.", + "metadata": "Bytes to send along to the emitted event, as well as the data hook and redeem hook if applicable.", + "minTokensReclaimed": "The minimum number of terminal tokens expected in return, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the redemption is reverted.", + "projectId": "The ID of the project the project tokens belong to.", + "redeemCount": "The number of project tokens to redeem, as a fixed point number with 18 decimals.", + "tokenToReclaim": "The token being reclaimed." + }, + "returns": { + "reclaimAmount": "The amount of terminal tokens that the project tokens were redeemed for, as a fixed point number with 18 decimals." + } + }, + "sendPayoutsOf(uint256,address,uint256,uint256,uint256)": { + "details": "If the percentages of the splits in the project's payout split group do not add up to 100%, the remainder is sent to the project's owner.Anyone can send payouts on a project's behalf. Projects can include a wildcard split (a split with no `hook`, `projectId`, or `beneficiary`) to send funds to the `_msgSender()` which calls this function. This can be used to incentivize calling this function.payouts sent to addresses which aren't feeless incur the protocol fee.Payouts a projects don't incur fees if its terminal is feeless.", + "params": { + "amount": "The total number of terminal tokens to send, as a fixed point number with same number of decimals as this terminal.", + "currency": "The expected currency of the payouts being sent. Must match the currency of one of the project's current ruleset's payout limits.", + "minTokensPaidOut": "The minimum number of terminal tokens that the `amount` should be worth (if expressed in terms of this terminal's currency), as a fixed point number with the same number of decimals as this terminal. If the amount of tokens paid out would be less than this amount, the send is reverted.", + "projectId": "The ID of the project having its payouts sent.", + "token": "The token being sent." + }, + "returns": { + "amountPaidOut": "The total amount paid out." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "trustedForwarder()": { + "details": "Returns the address of the trusted forwarder." + }, + "useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)": { + "details": "Only a project's owner or an operator with the `USE_ALLOWANCE` permission from that owner can use the surplus allowance.Incurs the protocol fee unless the caller is a feeless address.", + "params": { + "amount": "The amount of terminal tokens to use from the project's current surplus allowance, as a fixed point number with the same amount of decimals as this terminal.", + "beneficiary": "The address to send the surplus funds to.", + "currency": "The expected currency of the amount being paid out. Must match the currency of one of the project's current ruleset's surplus allowances.", + "memo": "A memo to pass along to the emitted event.", + "minTokensPaidOut": "The minimum number of terminal tokens that should be used from the surplus allowance (including fees), as a fixed point number with 18 decimals. If the amount of surplus used would be less than this amount, the transaction is reverted.", + "projectId": "The ID of the project to use the surplus allowance of.", + "token": "The token being paid out from the surplus." + }, + "returns": { + "amountPaidOut": "The number of tokens that were sent to the beneficiary, as a fixed point number with the same amount of decimals as the terminal." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for PROJECTS." + }, + "FEE()": { + "notice": "The fee percent (out of `JBConstants.MAX_FEE`)." + }, + "FEELESS_ADDRESSES()": { + "notice": "The contract that stores addresses that shouldn't incur fees when being paid towards or from." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PERMIT2()": { + "notice": "The permit2 utility." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "SPLITS()": { + "notice": "The contract that stores splits for each project." + }, + "STORE()": { + "notice": "The contract that stores and manages the terminal's data." + }, + "accountingContextForTokenOf(uint256,address)": { + "notice": "A project's accounting context for a token." + }, + "accountingContextsOf(uint256)": { + "notice": "The tokens accepted by a project." + }, + "addAccountingContextsFor(uint256,address[])": { + "notice": "Adds accounting contexts for a project to this terminal so the project can begin accepting the tokens in those contexts." + }, + "addToBalanceOf(uint256,address,uint256,bool,string,bytes)": { + "notice": "Adds funds to a project's balance without minting tokens." + }, + "currentSurplusOf(uint256,uint256,uint256)": { + "notice": "Gets the total current surplus amount in this terminal for a project, in terms of a given currency." + }, + "executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)": { + "notice": "Executes a payout to a split." + }, + "executeProcessFee(uint256,address,uint256,address,address)": { + "notice": "Process a specified amount of fees for a project." + }, + "heldFeesOf(uint256,address)": { + "notice": "Fees that are being held for a project." + }, + "migrateBalanceOf(uint256,address,address)": { + "notice": "Migrate a project's funds and operations to a new terminal that accepts the same token type." + }, + "pay(uint256,address,uint256,address,uint256,string,bytes)": { + "notice": "Pay a project with tokens." + }, + "processHeldFeesOf(uint256,address)": { + "notice": "Process any fees that are being held for the project." + }, + "redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)": { + "notice": "Holders can redeem a project's tokens to reclaim some of that project's surplus tokens, or to trigger rules determined by the current ruleset's data hook and redeem hook." + }, + "sendPayoutsOf(uint256,address,uint256,uint256,uint256)": { + "notice": "Sends payouts to a project's current payout split group, according to its ruleset, up to its current payout limit." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)": { + "notice": "Allows a project to pay out funds from its surplus up to the current surplus allowance." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBMultiTerminal.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBPermissions.json b/deployments/nana-core/optimism_sepolia/JBPermissions.json new file mode 100644 index 00000000..c4a59838 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBPermissions.json @@ -0,0 +1,629 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBPermissions", + "address": "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasPermission", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasPermissions", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permissionsOf", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setPermissionsFor", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "permissionsData", + "type": "tuple", + "internalType": "struct JBPermissionsData", + "components": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OperatorPermissionsSet", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "indexed": false, + "internalType": "uint256[]" + }, + { + "name": "packed", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "PERMISSION_ID_OUT_OF_BOUNDS", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PERMISSION_ID_OUT_OF_BOUNDS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"packed\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"OperatorPermissionsSet\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"permissionId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasPermissions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"permissionsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"struct JBPermissionsData\",\"name\":\"permissionsData\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\"}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setPermissionsFor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"hasPermission(address,address,uint256,uint256)\":{\"params\":{\"account\":\"The account being operated on behalf of.\",\"operator\":\"The operator to check.\",\"permissionId\":\"The permission ID to check for.\",\"projectId\":\"The project ID that the operator has permission to operate under. 0 represents all projects.\"},\"returns\":{\"_0\":\"A flag indicating whether the operator has the specified permission.\"}},\"hasPermissions(address,address,uint256,uint256[])\":{\"params\":{\"account\":\"The account being operated on behalf of.\",\"operator\":\"The operator to check.\",\"permissionIds\":\"An array of permission IDs to check for.\",\"projectId\":\"The project ID that the operator has permission to operate under. 0 represents all projects.\"},\"returns\":{\"_0\":\"A flag indicating whether the operator has all specified permissions.\"}},\"setPermissionsFor(address,(address,uint256,uint256[]))\":{\"details\":\"Only an address can give permissions to or revoke permissions from its operators.\",\"params\":{\"account\":\"The account setting its operators' permissions.\",\"permissionsData\":\"The data which specifies the permissions the operator is being given.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"hasPermission(address,address,uint256,uint256)\":{\"notice\":\"Check if an operator has a specific permission for a specific address and project ID.\"},\"hasPermissions(address,address,uint256,uint256[])\":{\"notice\":\"Check if an operator has all of the specified permissions for a specific address and project ID.\"},\"permissionsOf(address,address,uint256)\":{\"notice\":\"The permissions that an operator has been given by an account for a specific project.\"},\"setPermissionsFor(address,(address,uint256,uint256[]))\":{\"notice\":\"Sets permissions for an operator.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBPermissions.sol\":\"JBPermissions\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"src/JBPermissions.sol\":{\"keccak256\":\"0x5d7cbebd7ea868bb17b2df9bd68ebc7a6fd5299c75601fe755b53f14c368d963\",\"urls\":[\"bzz-raw://1812675baaafeeb5074c7ddc6f9b5c5344fe5a213534f1a53f92d664ab0e2d02\",\"dweb:/ipfs/QmY9TC8njokB9gfPPEvDbTntNSd59K3hgKQia4oeJurNwr\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [], + "bytecode": "0x60a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "hasPermission(address,address,uint256,uint256)": { + "params": { + "account": "The account being operated on behalf of.", + "operator": "The operator to check.", + "permissionId": "The permission ID to check for.", + "projectId": "The project ID that the operator has permission to operate under. 0 represents all projects." + }, + "returns": { + "_0": "A flag indicating whether the operator has the specified permission." + } + }, + "hasPermissions(address,address,uint256,uint256[])": { + "params": { + "account": "The account being operated on behalf of.", + "operator": "The operator to check.", + "permissionIds": "An array of permission IDs to check for.", + "projectId": "The project ID that the operator has permission to operate under. 0 represents all projects." + }, + "returns": { + "_0": "A flag indicating whether the operator has all specified permissions." + } + }, + "setPermissionsFor(address,(address,uint256,uint256[]))": { + "details": "Only an address can give permissions to or revoke permissions from its operators.", + "params": { + "account": "The account setting its operators' permissions.", + "permissionsData": "The data which specifies the permissions the operator is being given." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "hasPermission(address,address,uint256,uint256)": { + "notice": "Check if an operator has a specific permission for a specific address and project ID." + }, + "hasPermissions(address,address,uint256,uint256[])": { + "notice": "Check if an operator has all of the specified permissions for a specific address and project ID." + }, + "permissionsOf(address,address,uint256)": { + "notice": "The permissions that an operator has been given by an account for a specific project." + }, + "setPermissionsFor(address,(address,uint256,uint256[]))": { + "notice": "Sets permissions for an operator." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBPermissions.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBPrices.json b/deployments/nana-core/optimism_sepolia/JBPrices.json new file mode 100644 index 00000000..d008f6f3 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBPrices.json @@ -0,0 +1,676 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBPrices", + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DEFAULT_PROJECT_ID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addPriceFeedFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "feed", + "type": "address", + "internalType": "contract IJBPriceFeed" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "priceFeedFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPriceFeed" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pricePerUnitOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddPriceFeed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "feed", + "type": "address", + "indexed": false, + "internalType": "contract IJBPriceFeed" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "INVALID_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "PRICE_FEED_ALREADY_EXISTS", + "inputs": [] + }, + { + "type": "error", + "name": "PRICE_FEED_NOT_FOUND", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "contractAddress": null, + "cumulativeGasUsed": "10405018", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000253", + "gasUsed": "9790655", + "hash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "index": 7, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 12, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x784b7dfeb7d4ed0c7ced9de3602a09e6c777828e1add8d80d512761c9c97d2ca" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 13, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 14, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 15, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 16, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 17, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 18, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 19, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 20, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 21, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 22, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 29, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 30, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 31, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 32, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040020000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000800000000400100800000000200000000000000000000804000000020004000081010000000000000000000020208400000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_CURRENCY\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PRICE_FEED_ALREADY_EXISTS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PRICE_FEED_NOT_FOUND\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"feed\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddPriceFeed\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DEFAULT_PROJECT_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"feed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"addPriceFeedFor\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"priceFeedFor\",\"outputs\":[{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"pricePerUnitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addPriceFeedFor(uint256,uint256,uint256,address)\":{\"details\":\"Existing feeds can't be modified. Neither can feeds that have already been set as defaults (project ID 0).\",\"params\":{\"feed\":\"The price feed being added.\",\"pricingCurrency\":\"The currency the feed's resulting price is in terms of.\",\"unitCurrency\":\"The currency being priced by the feed.\"}},\"constructor\":{\"params\":{\"owner\":\"The address that will own the contract.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pricePerUnitOf(uint256,uint256,uint256,uint256)\":{\"params\":{\"decimals\":\"The number of decimals the returned fixed point price should include.\",\"pricingCurrency\":\"The currency the feed's resulting price is in terms of.\",\"projectId\":\"The ID of the project to check the feed for. Feeds stored in ID 0 are used by default for all projects.\",\"unitCurrency\":\"The currency being priced by the feed.\"},\"returns\":{\"_0\":\"The `pricingCurrency` price of 1 `unitCurrency`, as a fixed point number with the specified number of decimals.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DEFAULT_PROJECT_ID()\":{\"notice\":\"The ID to store default values in.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"addPriceFeedFor(uint256,uint256,uint256,address)\":{\"notice\":\"Add a price feed for the `unitCurrency`, priced in terms of the `pricingCurrency`.\"},\"priceFeedFor(uint256,uint256,uint256)\":{\"notice\":\"The available price feeds.\"},\"pricePerUnitOf(uint256,uint256,uint256,uint256)\":{\"notice\":\"Gets the `pricingCurrency` cost for one unit of the `unitCurrency`.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBPrices.sol\":\"JBPrices\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBPrices.sol\":{\"keccak256\":\"0x72a9d8378947113c1e6c20afb09936eb3cab6f745c9989612cf4331278542423\",\"urls\":[\"bzz-raw://adc10aac203d3e4971fd2fc09dfbbf0e4528ced439a557fc7664c8271b12db61\",\"dweb:/ipfs/Qmc4cNYDDFfSpaaKaNRceSFkZqP5oJtkEi9CvRuUkoVAUx\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x60c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "addPriceFeedFor(uint256,uint256,uint256,address)": { + "details": "Existing feeds can't be modified. Neither can feeds that have already been set as defaults (project ID 0).", + "params": { + "feed": "The price feed being added.", + "pricingCurrency": "The currency the feed's resulting price is in terms of.", + "unitCurrency": "The currency being priced by the feed." + } + }, + "constructor": { + "params": { + "owner": "The address that will own the contract.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pricePerUnitOf(uint256,uint256,uint256,uint256)": { + "params": { + "decimals": "The number of decimals the returned fixed point price should include.", + "pricingCurrency": "The currency the feed's resulting price is in terms of.", + "projectId": "The ID of the project to check the feed for. Feeds stored in ID 0 are used by default for all projects.", + "unitCurrency": "The currency being priced by the feed." + }, + "returns": { + "_0": "The `pricingCurrency` price of 1 `unitCurrency`, as a fixed point number with the specified number of decimals." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DEFAULT_PROJECT_ID()": { + "notice": "The ID to store default values in." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "addPriceFeedFor(uint256,uint256,uint256,address)": { + "notice": "Add a price feed for the `unitCurrency`, priced in terms of the `pricingCurrency`." + }, + "priceFeedFor(uint256,uint256,uint256)": { + "notice": "The available price feeds." + }, + "pricePerUnitOf(uint256,uint256,uint256,uint256)": { + "notice": "Gets the `pricingCurrency` cost for one unit of the `unitCurrency`." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBPrices.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBProjects.json b/deployments/nana-core/optimism_sepolia/JBProjects.json new file mode 100644 index 00000000..36d50f1a --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBProjects.json @@ -0,0 +1,1518 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBProjects", + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "CLOCK_MODE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "clock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "count", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createFor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegate", + "inputs": [ + { + "name": "delegatee", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegateBySig", + "inputs": [ + { + "name": "delegatee", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "v", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "r", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegates", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getApproved", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPastTotalSupply", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPastVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isApprovedForAll", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nonces", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ownerOf", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setApprovalForAll", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "approved", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTokenUriResolver", + "inputs": [ + { + "name": "newResolver", + "type": "address", + "internalType": "contract IJBTokenUriResolver" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenURI", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenUriResolver", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTokenUriResolver" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "approved", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ApprovalForAll", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "approved", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Create", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DelegateChanged", + "inputs": [ + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "fromDelegate", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "toDelegate", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DelegateVotesChanged", + "inputs": [ + { + "name": "delegate", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "previousVotes", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newVotes", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetTokenUriResolver", + "inputs": [ + { + "name": "resolver", + "type": "address", + "indexed": true, + "internalType": "contract IJBTokenUriResolver" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CheckpointUnorderedInsertion", + "inputs": [] + }, + { + "type": "error", + "name": "ECDSAInvalidSignature", + "inputs": [] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureS", + "inputs": [ + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ERC5805FutureLookup", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "clock", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "error", + "name": "ERC6372InconsistentClock", + "inputs": [] + }, + { + "type": "error", + "name": "ERC721IncorrectOwner", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InsufficientApproval", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidApprover", + "inputs": [ + { + "name": "approver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidReceiver", + "inputs": [ + { + "name": "receiver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidSender", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721NonexistentToken", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidAccountNonce", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "currentNonce", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidShortString", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "SafeCastOverflowedUintDowncast", + "inputs": [ + { + "name": "bits", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "StringTooLong", + "inputs": [ + { + "name": "str", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "error", + "name": "VotesExpiredSignature", + "inputs": [ + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CheckpointUnorderedInsertion\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ECDSAInvalidSignature\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ECDSAInvalidSignatureLength\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"ECDSAInvalidSignatureS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"clock\",\"type\":\"uint48\"}],\"type\":\"error\",\"name\":\"ERC5805FutureLookup\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC6372InconsistentClock\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721IncorrectOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ERC721InsufficientApproval\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidApprover\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidOperator\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidReceiver\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidSender\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ERC721NonexistentToken\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"InvalidAccountNonce\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidShortString\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"SafeCastOverflowedUintDowncast\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"type\":\"error\",\"name\":\"StringTooLong\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"VotesExpiredSignature\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Approval\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ApprovalForAll\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Create\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"DelegateChanged\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"previousVotes\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"newVotes\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"DelegateVotesChanged\",\"anonymous\":false},{\"inputs\":[],\"type\":\"event\",\"name\":\"EIP712DomainChanged\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"resolver\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetTokenUriResolver\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Transfer\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"CLOCK_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approve\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"clock\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"createFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"delegate\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"delegateBySig\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"safeTransferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"safeTransferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setApprovalForAll\"},{\"inputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"newResolver\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenUriResolver\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenUriResolver\",\"outputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"CLOCK_MODE()\":{\"details\":\"Machine-readable description of the clock as specified in EIP-6372.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"clock()\":{\"details\":\"Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match.\"},\"constructor\":{\"params\":{\"owner\":\"The owner of the contract who can set metadata.\"}},\"createFor(address)\":{\"details\":\"Anyone can create a project on an owner's behalf.\",\"params\":{\"owner\":\"The address that will be the owner of the project.\"},\"returns\":{\"projectId\":\"The token ID of the newly created project.\"}},\"delegate(address)\":{\"details\":\"Delegates votes from the sender to `delegatee`.\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Delegates votes from signer to `delegatee`.\"},\"delegates(address)\":{\"details\":\"Returns the delegate that `account` has chosen.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getPastTotalSupply(uint256)\":{\"details\":\"Returns the total supply of votes available at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes. Votes that have not been delegated are still part of total supply, even though they would not participate in a vote. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\"},\"getPastVotes(address,uint256)\":{\"details\":\"Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\"},\"getVotes(address)\":{\"details\":\"Returns the current amount of votes that `account` has.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"nonces(address)\":{\"details\":\"Returns the next unused nonce for an address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"setTokenUriResolver(address)\":{\"params\":{\"newResolver\":\"The address of the new resolver.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get a URI of.\"},\"returns\":{\"_0\":\"The token URI to use for the provided `projectId`.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"count()\":{\"notice\":\"The number of projects that have been created using this contract.\"},\"createFor(address)\":{\"notice\":\"Create a new project for the specified owner, which mints an NFT (ERC-721) into their wallet.\"},\"setTokenUriResolver(address)\":{\"notice\":\"Sets the address of the resolver used to retrieve the tokenURI of projects.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"tokenURI(uint256)\":{\"notice\":\"Returns the URI where the ERC-721 standard JSON of a project is hosted.\"},\"tokenUriResolver()\":{\"notice\":\"The contract resolving each project ID to its ERC721 URI.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBProjects.sol\":\"JBProjects\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947\",\"urls\":[\"bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856\",\"dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/Votes.sol\":{\"keccak256\":\"0xb8f69828d41b3594afd7a8c6393565901c205d8b5baf5bd2e42dbac637172979\",\"urls\":[\"bzz-raw://c790253821191ac46b2050d87df820d4209871f90c616381e2c2c00ff3eaac34\",\"dweb:/ipfs/QmcPETTyuZBzDRL39JNXj3SBMdx3Y9o4fPQLSZ27py5Jim\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol\":{\"keccak256\":\"0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818\",\"urls\":[\"bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a\",\"dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol\":{\"keccak256\":\"0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33\",\"urls\":[\"bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb\",\"dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784\",\"urls\":[\"bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd\",\"dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49\",\"urls\":[\"bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22\",\"dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol\":{\"keccak256\":\"0x51eec12bef5f18ea0bad353fbdc227c67b9082d1b459f7c87f47711ad152b0b3\",\"urls\":[\"bzz-raw://3f9142b8e720fa76191a966be6fd93a2a4357f5ac86bbb5cb050e53add32bfbe\",\"dweb:/ipfs/QmdFWtPT9PrMpQkExuDLCAELqA8yfYjQpfWKymdHdRTy2T\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol\":{\"keccak256\":\"0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad\",\"urls\":[\"bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b\",\"dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"],\"license\":\"MIT\"},\"src/JBProjects.sol\":{\"keccak256\":\"0xb959e3d60bc4a8a43b9358be16549ca6d10059db3467c43703fa0c6c8e73621a\",\"urls\":[\"bzz-raw://5eb424d178e5946688c7ad6bfc7420c3c8bd7e9d5b2a0fef175462a6a4710012\",\"dweb:/ipfs/QmeXuNoYXrNZVrom4f6Mk5bcKbGk5BtRCzXKf9cpZDoCKW\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x6101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f4a75696365626f782050726f6a65637473000000000000000000000000000011600661162d565b60606108957f3100000000000000000000000000000000000000000000000000000000000001600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71614801561174857507f0000000000000000000000000000000000000000000000000000000000aa37dc46145b1561177257507feea6702a3dc262c5a20ae4a66509daf40a12a0bcf40a329f3b196c3b18fc140390565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f2e5c5c1c4affeaeda2d3db263faddbd323c18ac7d44a6ca994665583d3b15dad918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "CLOCK_MODE()": { + "details": "Machine-readable description of the clock as specified in EIP-6372." + }, + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "clock()": { + "details": "Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match." + }, + "constructor": { + "params": { + "owner": "The owner of the contract who can set metadata." + } + }, + "createFor(address)": { + "details": "Anyone can create a project on an owner's behalf.", + "params": { + "owner": "The address that will be the owner of the project." + }, + "returns": { + "projectId": "The token ID of the newly created project." + } + }, + "delegate(address)": { + "details": "Delegates votes from the sender to `delegatee`." + }, + "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": { + "details": "Delegates votes from signer to `delegatee`." + }, + "delegates(address)": { + "details": "Returns the delegate that `account` has chosen." + }, + "eip712Domain()": { + "details": "See {IERC-5267}." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "getPastTotalSupply(uint256)": { + "details": "Returns the total supply of votes available at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes. Votes that have not been delegated are still part of total supply, even though they would not participate in a vote. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined." + }, + "getPastVotes(address,uint256)": { + "details": "Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined." + }, + "getVotes(address)": { + "details": "Returns the current amount of votes that `account` has." + }, + "isApprovedForAll(address,address)": { + "details": "See {IERC721-isApprovedForAll}." + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "nonces(address)": { + "details": "Returns the next unused nonce for an address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "setTokenUriResolver(address)": { + "params": { + "newResolver": "The address of the new resolver." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "tokenURI(uint256)": { + "params": { + "projectId": "The ID of the project to get a URI of." + }, + "returns": { + "_0": "The token URI to use for the provided `projectId`." + } + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "count()": { + "notice": "The number of projects that have been created using this contract." + }, + "createFor(address)": { + "notice": "Create a new project for the specified owner, which mints an NFT (ERC-721) into their wallet." + }, + "setTokenUriResolver(address)": { + "notice": "Sets the address of the resolver used to retrieve the tokenURI of projects." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "tokenURI(uint256)": { + "notice": "Returns the URI where the ERC-721 standard JSON of a project is hosted." + }, + "tokenUriResolver()": { + "notice": "The contract resolving each project ID to its ERC721 URI." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBProjects.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBRulesets.json b/deployments/nana-core/optimism_sepolia/JBRulesets.json new file mode 100644 index 00000000..b2e32371 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBRulesets.json @@ -0,0 +1,1157 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBRulesets", + "address": "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentApprovalStatusForLatestRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestQueuedRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approvalStatus", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestRulesetIdOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "queueFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startingId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "size", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "rulesets", + "type": "tuple[]", + "internalType": "struct JBRuleset[]", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "upcomingRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateRulesetWeightCache", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "RulesetInitialized", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RulesetQueued", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "indexed": false, + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "BLOCK_ALREADY_CONTAINS_RULESET", + "inputs": [] + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_DECAY_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_APPROVAL_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_DURATION", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_END_TIME", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_WEIGHT", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BLOCK_ALREADY_CONTAINS_RULESET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_DECAY_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_APPROVAL_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_DURATION\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_END_TIME\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_WEIGHT\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RulesetInitialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"RulesetQueued\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentApprovalStatusForLatestRulesetOf\",\"outputs\":[{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestQueuedRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"approvalStatus\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestRulesetIdOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"queueFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startingId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rulesetsOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset[]\",\"name\":\"rulesets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upcomingRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateRulesetWeightCache\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"currentApprovalStatusForLatestRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to check the approval status of.\"},\"returns\":{\"_0\":\"The project's current approval status.\"}},\"currentOf(uint256)\":{\"details\":\"If a current ruleset of the project is not found, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project to get the current ruleset of.\"},\"returns\":{\"ruleset\":\"The project's current ruleset.\"}},\"getRulesetOf(uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to which the ruleset belongs.\",\"rulesetId\":\"The ID of the ruleset to get the struct of.\"},\"returns\":{\"ruleset\":\"The ruleset struct.\"}},\"latestQueuedRulesetOf(uint256)\":{\"details\":\"Returns struct and status for the ruleset initialized furthest in the future (at the end of the rulset queue).\",\"params\":{\"projectId\":\"The ID of the project to get the latest queued ruleset of.\"},\"returns\":{\"approvalStatus\":\"The approval hook's status for the ruleset.\",\"ruleset\":\"The project's latest queued ruleset's struct.\"}},\"queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)\":{\"details\":\"Only a project's current controller can queue its rulesets.\",\"params\":{\"approvalHook\":\"An address of a contract that says whether a proposed ruleset should be accepted or rejected. It can be used to create rules around how a project owner can change ruleset parameters over time.\",\"decayRate\":\"A percent by how much the `weight` of the subsequent ruleset should be reduced, if the project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of `JBConstants.MAX_DECAY_RATE`.\",\"duration\":\"The number of seconds the ruleset lasts for, after which a new ruleset will start. A duration of 0 means that the ruleset will stay active until the project owner explicitly issues a reconfiguration, at which point a new ruleset will immediately start with the updated properties. If the duration is greater than 0, a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will apply to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same properties but new `start` timestamp and a decayed `weight`.\",\"metadata\":\"Arbitrary extra data to associate with this ruleset. This metadata is not used by `JBRulesets`.\",\"mustStartAtOrAfter\":\"The earliest time the ruleset can start. The ruleset cannot start before this timestamp.\",\"projectId\":\"The ID of the project the ruleset is being queued for.\",\"weight\":\"A fixed point number with 18 decimals that contracts can use to base arbitrary calculations on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is received.\"},\"returns\":{\"_0\":\"The struct of the new ruleset.\"}},\"rulesetsOf(uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the rulesets of.\",\"size\":\"The maximum number of rulesets to return.\",\"startingId\":\"The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used.\"},\"returns\":{\"rulesets\":\"The rulesets as an array of `JBRuleset` structs.\"}},\"upcomingRulesetOf(uint256)\":{\"details\":\"If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project to get the upcoming ruleset of.\"},\"returns\":{\"ruleset\":\"The struct for the project's upcoming ruleset.\"}},\"updateRulesetWeightCache(uint256)\":{\"params\":{\"projectId\":\"The ID of the project having its ruleset weight cached.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"currentApprovalStatusForLatestRulesetOf(uint256)\":{\"notice\":\"The current approval status of a given project's latest ruleset.\"},\"currentOf(uint256)\":{\"notice\":\"The ruleset that is currently active for the specified project.\"},\"getRulesetOf(uint256,uint256)\":{\"notice\":\"Get the ruleset struct for a given `rulesetId` and `projectId`.\"},\"latestQueuedRulesetOf(uint256)\":{\"notice\":\"The latest ruleset queued for a project. Returns the ruleset's struct and its current approval status.\"},\"latestRulesetIdOf(uint256)\":{\"notice\":\"The ID of the ruleset with the latest start time for a specific project, whether the ruleset has been approved or not.\"},\"queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)\":{\"notice\":\"Queues the upcoming approvable ruleset for the specified project.\"},\"rulesetsOf(uint256,uint256,uint256)\":{\"notice\":\"Get an array of a project's rulesets up to a maximum array size, sorted from latest to earliest.\"},\"upcomingRulesetOf(uint256)\":{\"notice\":\"The ruleset that's up next for a project.\"},\"updateRulesetWeightCache(uint256)\":{\"notice\":\"Cache the value of the ruleset weight.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBRulesets.sol\":\"JBRulesets\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBRulesets.sol\":{\"keccak256\":\"0xd92f2897151637ec46f1a70d39ce45670ce3aafb03f3539240a943994fd0444b\",\"urls\":[\"bzz-raw://50415496ef3025d2d7c466d9b7888f0797f42877b401567b5dd3fe9e7ba95f62\",\"dweb:/ipfs/QmXqzzjpDRgJHEmkWm2h7HMVaLEEQ7pnvHNh86gkSsDQiv\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWeightCache.sol\":{\"keccak256\":\"0x20da9376d0b4b24f7bfb049ac13991ac4a9f5676c3bae5c6fb049a78239d1529\",\"urls\":[\"bzz-raw://11f9b1b4373ce700b82e4159bd6688115aae349996f73d3571abf99fa8cdb1aa\",\"dweb:/ipfs/QmV8DxuoUskd6frKLhT61Sq4VTCygrcS6jbXHJU9KmHX1h\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "currentApprovalStatusForLatestRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project to check the approval status of." + }, + "returns": { + "_0": "The project's current approval status." + } + }, + "currentOf(uint256)": { + "details": "If a current ruleset of the project is not found, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project to get the current ruleset of." + }, + "returns": { + "ruleset": "The project's current ruleset." + } + }, + "getRulesetOf(uint256,uint256)": { + "params": { + "projectId": "The ID of the project to which the ruleset belongs.", + "rulesetId": "The ID of the ruleset to get the struct of." + }, + "returns": { + "ruleset": "The ruleset struct." + } + }, + "latestQueuedRulesetOf(uint256)": { + "details": "Returns struct and status for the ruleset initialized furthest in the future (at the end of the rulset queue).", + "params": { + "projectId": "The ID of the project to get the latest queued ruleset of." + }, + "returns": { + "approvalStatus": "The approval hook's status for the ruleset.", + "ruleset": "The project's latest queued ruleset's struct." + } + }, + "queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)": { + "details": "Only a project's current controller can queue its rulesets.", + "params": { + "approvalHook": "An address of a contract that says whether a proposed ruleset should be accepted or rejected. It can be used to create rules around how a project owner can change ruleset parameters over time.", + "decayRate": "A percent by how much the `weight` of the subsequent ruleset should be reduced, if the project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of `JBConstants.MAX_DECAY_RATE`.", + "duration": "The number of seconds the ruleset lasts for, after which a new ruleset will start. A duration of 0 means that the ruleset will stay active until the project owner explicitly issues a reconfiguration, at which point a new ruleset will immediately start with the updated properties. If the duration is greater than 0, a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will apply to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same properties but new `start` timestamp and a decayed `weight`.", + "metadata": "Arbitrary extra data to associate with this ruleset. This metadata is not used by `JBRulesets`.", + "mustStartAtOrAfter": "The earliest time the ruleset can start. The ruleset cannot start before this timestamp.", + "projectId": "The ID of the project the ruleset is being queued for.", + "weight": "A fixed point number with 18 decimals that contracts can use to base arbitrary calculations on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is received." + }, + "returns": { + "_0": "The struct of the new ruleset." + } + }, + "rulesetsOf(uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the rulesets of.", + "size": "The maximum number of rulesets to return.", + "startingId": "The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used." + }, + "returns": { + "rulesets": "The rulesets as an array of `JBRuleset` structs." + } + }, + "upcomingRulesetOf(uint256)": { + "details": "If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project to get the upcoming ruleset of." + }, + "returns": { + "ruleset": "The struct for the project's upcoming ruleset." + } + }, + "updateRulesetWeightCache(uint256)": { + "params": { + "projectId": "The ID of the project having its ruleset weight cached." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "currentApprovalStatusForLatestRulesetOf(uint256)": { + "notice": "The current approval status of a given project's latest ruleset." + }, + "currentOf(uint256)": { + "notice": "The ruleset that is currently active for the specified project." + }, + "getRulesetOf(uint256,uint256)": { + "notice": "Get the ruleset struct for a given `rulesetId` and `projectId`." + }, + "latestQueuedRulesetOf(uint256)": { + "notice": "The latest ruleset queued for a project. Returns the ruleset's struct and its current approval status." + }, + "latestRulesetIdOf(uint256)": { + "notice": "The ID of the ruleset with the latest start time for a specific project, whether the ruleset has been approved or not." + }, + "queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)": { + "notice": "Queues the upcoming approvable ruleset for the specified project." + }, + "rulesetsOf(uint256,uint256,uint256)": { + "notice": "Get an array of a project's rulesets up to a maximum array size, sorted from latest to earliest." + }, + "upcomingRulesetOf(uint256)": { + "notice": "The ruleset that's up next for a project." + }, + "updateRulesetWeightCache(uint256)": { + "notice": "Cache the value of the ruleset weight." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBRulesets.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBSplits.json b/deployments/nana-core/optimism_sepolia/JBSplits.json new file mode 100644 index 00000000..d7d65599 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBSplits.json @@ -0,0 +1,684 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBSplits", + "address": "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FALLBACK_RULESET_ID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setSplitGroupsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "splitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "SetSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_LOCKED_UNTIL", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PROJECT_ID", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SPLIT_PERCENT", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_TOTAL_PERCENT", + "inputs": [] + }, + { + "type": "error", + "name": "PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_LOCKED_UNTIL\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PROJECT_ID\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SPLIT_PERCENT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_TOTAL_PERCENT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetSplit\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FALLBACK_RULESET_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setSplitGroupsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"splitsOf\",\"outputs\":[{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"details\":\"Only a project's controller can set its splits.The new split groups must include any currently set splits that are locked.\",\"params\":{\"projectId\":\"The ID of the project to set the split groups of.\",\"rulesetId\":\"The ID of the ruleset the split groups should be active in. Send 0 to set the default split that'll be active if no ruleset has specific splits set. The default's default is the project's owner.\",\"splitGroups\":\"An array of split groups to set.\"}},\"splitsOf(uint256,uint256,uint256)\":{\"details\":\"If splits aren't found at the given `rulesetId`, they'll be sought in the FALLBACK_RULESET_ID of 0.\",\"params\":{\"groupId\":\"The identifying group of the splits.\",\"projectId\":\"The ID of the project to get splits for.\",\"rulesetId\":\"An identifier within which the returned splits should be considered active.\"},\"returns\":{\"splits\":\"An array of all splits for the project.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"FALLBACK_RULESET_ID()\":{\"notice\":\"the ID of the ruleset that will be checked if nothing was found in the provided rulesetId.\"},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"notice\":\"Sets a project's split groups.\"},\"splitsOf(uint256,uint256,uint256)\":{\"notice\":\"Get the split structs for the specified project ID, within the specified ruleset, for the specified group. The splits stored at ruleset 0 are used by default during a ruleset if the splits for the specific ruleset aren't set.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBSplits.sol\":\"JBSplits\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBSplits.sol\":{\"keccak256\":\"0xb617e399f74582f9e4684059d732e72ae4ee887cf7f533e3c3e43cfa1695333b\",\"urls\":[\"bzz-raw://26d025f906cb7586cbac8e666b518553d7cb35d4bddf9bfdb8f4b3f7399ab4fd\",\"dweb:/ipfs/QmekRKnrfALw964FDaMhEWBQmDCKRDqqnKZtD7vDZKDdNV\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "details": "Only a project's controller can set its splits.The new split groups must include any currently set splits that are locked.", + "params": { + "projectId": "The ID of the project to set the split groups of.", + "rulesetId": "The ID of the ruleset the split groups should be active in. Send 0 to set the default split that'll be active if no ruleset has specific splits set. The default's default is the project's owner.", + "splitGroups": "An array of split groups to set." + } + }, + "splitsOf(uint256,uint256,uint256)": { + "details": "If splits aren't found at the given `rulesetId`, they'll be sought in the FALLBACK_RULESET_ID of 0.", + "params": { + "groupId": "The identifying group of the splits.", + "projectId": "The ID of the project to get splits for.", + "rulesetId": "An identifier within which the returned splits should be considered active." + }, + "returns": { + "splits": "An array of all splits for the project." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "FALLBACK_RULESET_ID()": { + "notice": "the ID of the ruleset that will be checked if nothing was found in the provided rulesetId." + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "notice": "Sets a project's split groups." + }, + "splitsOf(uint256,uint256,uint256)": { + "notice": "Get the split structs for the specified project ID, within the specified ruleset, for the specified group. The splits stored at ruleset 0 are used by default during a ruleset if the splits for the specific ruleset aren't set." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBSplits.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBTerminalStore.json b/deployments/nana-core/optimism_sepolia/JBTerminalStore.json new file mode 100644 index 00000000..1f1a80e8 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBTerminalStore.json @@ -0,0 +1,1466 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBTerminalStore", + "address": "0xa0D811360b0d49be8d33309D6eAE03D072E30312", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "rulesets", + "type": "address", + "internalType": "contract IJBRulesets" + }, + { + "name": "prices", + "type": "address", + "internalType": "contract IJBPrices" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PRICES", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPrices" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "RULESETS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBRulesets" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentReclaimableSurplusOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "useTotalSurplus", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentReclaimableSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "surplus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentSurplusOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentTotalSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "recordAddedBalanceFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordPaymentFrom", + "inputs": [ + { + "name": "payer", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hookSpecifications", + "type": "tuple[]", + "internalType": "struct JBPayHookSpecification[]", + "components": [ + { + "name": "hook", + "type": "address", + "internalType": "contract IJBPayHook" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordPayoutFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordRedemptionFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "balanceAccountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "reclaimAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hookSpecifications", + "type": "tuple[]", + "internalType": "struct JBRedeemHookSpecification[]", + "components": [ + { + "name": "hook", + "type": "address", + "internalType": "contract IJBRedeemHook" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordTerminalMigration", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordUsedAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "usedAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "usedPayoutLimitOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "usedSurplusAllowanceOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "error", + "name": "INADEQUATE_CONTROLLER_ALLOWANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_TERMINAL_STORE_BALANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_TOKENS", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_AMOUNT_TO_SEND_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET", + "inputs": [] + }, + { + "type": "error", + "name": "PAYOUT_LIMIT_EXCEEDED", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "RULESET_PAYMENT_PAUSED", + "inputs": [] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "TERMINAL_MIGRATION_NOT_ALLOWED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "contractAddress": null, + "cumulativeGasUsed": "10405018", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000253", + "gasUsed": "9790655", + "hash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "index": 7, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 12, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x784b7dfeb7d4ed0c7ced9de3602a09e6c777828e1add8d80d512761c9c97d2ca" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 13, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 14, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 15, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 16, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 17, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 18, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 19, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 20, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 21, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 22, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 29, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 30, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 31, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 32, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040020000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000800000000400100800000000200000000000000000000804000000020004000081010000000000000000000020208400000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBRulesets\",\"name\":\"rulesets\",\"type\":\"address\"},{\"internalType\":\"contract IJBPrices\",\"name\":\"prices\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_CONTROLLER_ALLOWANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_TERMINAL_STORE_BALANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_TOKENS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_AMOUNT_TO_SEND_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PAYOUT_LIMIT_EXCEEDED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RULESET_PAYMENT_PAUSED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TERMINAL_MIGRATION_NOT_ALLOWED\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PRICES\",\"outputs\":[{\"internalType\":\"contract IJBPrices\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"RULESETS\",\"outputs\":[{\"internalType\":\"contract IJBRulesets\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"accountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplus\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentReclaimableSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"surplus\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentReclaimableSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"accountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentTotalSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordAddedBalanceFor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"amount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordPaymentFrom\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBPayHookSpecification[]\",\"name\":\"hookSpecifications\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBPayHook\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordPayoutFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"balanceAccountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordRedemptionFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"reclaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRedeemHookSpecification[]\",\"name\":\"hookSpecifications\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBRedeemHook\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordTerminalMigration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordUsedAllowanceOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"usedAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"usedPayoutLimitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"usedSurplusAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"prices\":\"A contract that exposes price feeds.\",\"rulesets\":\"A contract storing and managing project rulesets.\"}},\"currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)\":{\"details\":\"The returned amount in terms of the specified terminal's currency.The returned amount is represented as a fixed point number with the same amount of decimals as the specified terminal.\",\"params\":{\"accountingContexts\":\"The accounting contexts of tokens whose balances should contribute to the surplus being reclaimed from.\",\"currency\":\"The currency that the resulting number will be in terms of.\",\"decimals\":\"The number of decimals to include in the resulting fixed point number.\",\"projectId\":\"The ID of the project to get the redeemable surplus amount for.\",\"terminal\":\"The terminal the redeemable amount would come from.\",\"tokenCount\":\"The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\",\"useTotalSurplus\":\"A flag indicating whether the surplus used in the calculation should be summed from all of the project's terminals. If false, surplus should be limited to the amount in the specified `terminal`.\"},\"returns\":{\"_0\":\"The amount of surplus tokens that can be reclaimed by redeeming `tokenCount` tokens as a fixed point number with the specified number of decimals.\"}},\"currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the reclaimable surplus amount for.\",\"surplus\":\"The surplus amount to make the calculation with, as a fixed point number.\",\"tokenCount\":\"The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\",\"totalSupply\":\"The total number of tokens to make the calculation with, as a fixed point number with 18 decimals.\"},\"returns\":{\"_0\":\"The surplus token amount that can be reclaimed, as a fixed point number with the same number of decimals as the provided `surplus`.\"}},\"currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)\":{\"details\":\"The surplus is the amount of funds a project has in a terminal in excess of its payout limit.The surplus is represented as a fixed point number with the same amount of decimals as the specified terminal.\",\"params\":{\"accountingContexts\":\"The accounting contexts of tokens whose balances should contribute to the surplus being calculated.\",\"currency\":\"The currency the resulting amount should be in terms of.\",\"decimals\":\"The number of decimals to expect in the resulting fixed point number.\",\"projectId\":\"The ID of the project to get surplus for.\",\"terminal\":\"The terminal the surplus is being calculated for.\"},\"returns\":{\"_0\":\"The current surplus amount the project has in the specified terminal.\"}},\"currentTotalSurplusOf(uint256,uint256,uint256)\":{\"params\":{\"currency\":\"The currency that the total surplus should be in terms of.\",\"decimals\":\"The number of decimals that the fixed point surplus should include.\",\"projectId\":\"The ID of the project to get the total surplus for.\"},\"returns\":{\"_0\":\"The current total surplus amount that the project has across all terminals.\"}},\"recordAddedBalanceFor(uint256,address,uint256)\":{\"params\":{\"amount\":\"The amount of terminal tokens added, as a fixed point number with the same amount of decimals as its relative terminal.\",\"projectId\":\"The ID of the project which funds are being added to the balance of.\",\"token\":\"The token being added to the balance.\"}},\"recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)\":{\"details\":\"Mints the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, mints tokens in proportion with the amount paid.\",\"params\":{\"amount\":\"The amount of tokens being paid. Includes the token being paid, their value, the number of decimals included, and the currency of the amount.\",\"beneficiary\":\"The address that should be the beneficiary of anything the payment yields (including project tokens minted by the payment).\",\"metadata\":\"Bytes to send to the data hook, if the project's current ruleset specifies one.\",\"payer\":\"The address that made the payment to the terminal.\",\"projectId\":\"The ID of the project being paid.\"},\"returns\":{\"hookSpecifications\":\"A list of pay hooks, including data and amounts to send to them. The terminal should fulfill these specifications.\",\"ruleset\":\"The ruleset the payment was made during, as a `JBRuleset` struct.\",\"tokenCount\":\"The number of project tokens that were minted, as a fixed point number with 18 decimals.\"}},\"recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)\":{\"params\":{\"accountingContext\":\"The context of the token being paid out.\",\"amount\":\"The amount to pay out (use from the payout limit), as a fixed point number.\",\"currency\":\"The currency of the `amount`. This must match the project's current ruleset's currency.\",\"projectId\":\"The ID of the project that is paying out funds.\"},\"returns\":{\"amountPaidOut\":\"The amount of terminal tokens paid out, as a fixed point number with the same amount of decimals as its relative terminal.\",\"ruleset\":\"The ruleset the payout was made during, as a `JBRuleset` struct.\"}},\"recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)\":{\"details\":\"Redeems the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, redeems tokens along a redemption bonding curve that is a function of the number of tokens being burned.\",\"params\":{\"accountingContext\":\"The accounting context of the token being reclaimed by the redemption.\",\"balanceAccountingContexts\":\"The accounting contexts of the tokens whose balances should contribute to the surplus being reclaimed from.\",\"holder\":\"The account that is redeeming tokens.\",\"metadata\":\"Bytes to send to the data hook, if the project's current ruleset specifies one.\",\"projectId\":\"The ID of the project being redeemed from.\",\"redeemCount\":\"The number of project tokens to redeem, as a fixed point number with 18 decimals.\"},\"returns\":{\"hookSpecifications\":\"A list of redeem hooks, including data and amounts to send to them. The terminal should fulfill these specifications.\",\"reclaimAmount\":\"The amount of tokens reclaimed from the terminal, as a fixed point number with 18 decimals.\",\"redemptionRate\":\"The redemption rate influencing the reclaim amount.\",\"ruleset\":\"The ruleset during the redemption was made during, as a `JBRuleset` struct. This ruleset will have a redemption rate provided by the redemption hook if applicable.\"}},\"recordTerminalMigration(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project being migrated.\",\"token\":\"The token being migrated.\"},\"returns\":{\"balance\":\"The project's current balance (which is being migrated), as a fixed point number with the same amount of decimals as its relative terminal.\"}},\"recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)\":{\"details\":\"When surplus allowance is \\\"used\\\", it is taken out of the project's surplus within a terminal.\",\"params\":{\"accountingContext\":\"The accounting context of the token whose balances should contribute to the surplus allowance being reclaimed from.\",\"amount\":\"The amount to use from the surplus allowance, as a fixed point number.\",\"currency\":\"The currency of the `amount`. Must match the currency of the surplus allowance.\",\"projectId\":\"The ID of the project to use the surplus allowance of.\"},\"returns\":{\"ruleset\":\"The ruleset during the surplus allowance is being used during, as a `JBRuleset` struct.\",\"usedAmount\":\"The amount of terminal tokens used, as a fixed point number with the same amount of decimals as its relative terminal.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"PRICES()\":{\"notice\":\"The contract that exposes price feeds.\"},\"RULESETS()\":{\"notice\":\"The contract storing and managing project rulesets.\"},\"balanceOf(address,uint256,address)\":{\"notice\":\"A project's balance of a specific token within a terminal.\"},\"currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)\":{\"notice\":\"The surplus amount that can currently be reclaimed from a terminal by redeeming the specified number of tokens, based on the total token supply and current surplus.\"},\"currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)\":{\"notice\":\"The current amount of surplus tokens from a terminal that can be reclaimed by redeeming the specified number of tokens, based on the specified total token supply and surplus amounts.\"},\"currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)\":{\"notice\":\"Gets the current surplus amount in a terminal for a specified project.\"},\"currentTotalSurplusOf(uint256,uint256,uint256)\":{\"notice\":\"Gets the current surplus amount for a specified project across all terminals.\"},\"recordAddedBalanceFor(uint256,address,uint256)\":{\"notice\":\"Records funds being added to a project's balance.\"},\"recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)\":{\"notice\":\"Records a payment to a project.\"},\"recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)\":{\"notice\":\"Records a payout from a project.\"},\"recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)\":{\"notice\":\"Records a redemption from a project.\"},\"recordTerminalMigration(uint256,address)\":{\"notice\":\"Records the migration of funds from this store.\"},\"recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)\":{\"notice\":\"Records a use of a project's surplus allowance.\"},\"usedPayoutLimitOf(address,uint256,address,uint256,uint256)\":{\"notice\":\"The currency-denominated amount of funds that a project has already paid out from its payout limit during the current ruleset for each terminal, in terms of the payout limit's currency.\"},\"usedSurplusAllowanceOf(address,uint256,address,uint256,uint256)\":{\"notice\":\"The currency-denominated amounts of funds that a project has used from its surplus allowance during the current ruleset for each terminal, in terms of the surplus allowance's currency.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBTerminalStore.sol\":\"JBTerminalStore\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBTerminalStore.sol\":{\"keccak256\":\"0x061651822f7b0a94fca7c65bdeec41b25af7f87776a7a9b094186bd65f0ee49b\",\"urls\":[\"bzz-raw://843ec729dd7ce80f23189ace13a3f17706696e88409b49eb3cabef2b14cb7fab\",\"dweb:/ipfs/QmRGp9udBSEjCuH3iG2U1fRE3GBgiT91axvmRmr5VpGVWs\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetDataHook.sol\":{\"keccak256\":\"0x3fea9fcab6f0335e67f0f052cf5d3446e9310808f88b5878d21586be00f89f85\",\"urls\":[\"bzz-raw://5506848f471d308a14523f91202d76d960f8255e227d29d34b0892ef70315cae\",\"dweb:/ipfs/QmakRKFctSZobpem1caU2zXqhiPQnaYVa7Y6NdAPAonHaU\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTerminalStore.sol\":{\"keccak256\":\"0x81d5eb6c877f535143d26d2bef7be97dabf95122db4b1c6fdd0adc32ddc704ca\",\"urls\":[\"bzz-raw://551ab223b3498a20ae7e2bb3da7169ffa2c0a9ab3bd22c7387b19d69915809a4\",\"dweb:/ipfs/Qma2n7QtVAHmB7pWQavQnSBCouAfh171KezhYbNNmdT3wH\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBFixedPointNumber.sol\":{\"keccak256\":\"0x687bdcb1353e2d29f1bd38bbadeb4ab0f2cbb351688f77e56365a25044577b53\",\"urls\":[\"bzz-raw://ad7f8756cf5f209cff9fbe8a65e799e29c159da55a3a2d532298acfb9d567311\",\"dweb:/ipfs/QmZMCox7uDwZrnbiZnZheizrG6PAisuHVuJgXK9rHn7PKU\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBBeforePayRecordedContext.sol\":{\"keccak256\":\"0x5b04e814da83c7e83ff892ab07eaad6abce6f7b85a75f8da9380e9fc3470bc81\",\"urls\":[\"bzz-raw://11c889aab993fce3e3cc2dedc15fc30dd367e7fef9b7b1bfd6a6a9f248781731\",\"dweb:/ipfs/QmVVtydCD1azeWhGLxA1hthxfLyKzMHZ1eVzCz3a3R5dLy\"],\"license\":\"MIT\"},\"src/structs/JBBeforeRedeemRecordedContext.sol\":{\"keccak256\":\"0x73eadaf6827e82f6ccbe3a1e2b2b7fc6c59cef471f73335041b30ddcc000989d\",\"urls\":[\"bzz-raw://2f3ee84662eed565dbdaed406ef836fffaf55cccd417575578152e5085d0b1f2\",\"dweb:/ipfs/QmaJGFS7hxJsiUdKvbv5BKhSwceDEzKBnt7t5YeNWvYgMK\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "0x0631183bd45c31F8645F9dCF8705951F730362E9" + ], + "bytecode": "0x60e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e981565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb81565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e91690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "prices": "A contract that exposes price feeds.", + "rulesets": "A contract storing and managing project rulesets." + } + }, + "currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)": { + "details": "The returned amount in terms of the specified terminal's currency.The returned amount is represented as a fixed point number with the same amount of decimals as the specified terminal.", + "params": { + "accountingContexts": "The accounting contexts of tokens whose balances should contribute to the surplus being reclaimed from.", + "currency": "The currency that the resulting number will be in terms of.", + "decimals": "The number of decimals to include in the resulting fixed point number.", + "projectId": "The ID of the project to get the redeemable surplus amount for.", + "terminal": "The terminal the redeemable amount would come from.", + "tokenCount": "The number of tokens to make the calculation with, as a fixed point number with 18 decimals.", + "useTotalSurplus": "A flag indicating whether the surplus used in the calculation should be summed from all of the project's terminals. If false, surplus should be limited to the amount in the specified `terminal`." + }, + "returns": { + "_0": "The amount of surplus tokens that can be reclaimed by redeeming `tokenCount` tokens as a fixed point number with the specified number of decimals." + } + }, + "currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the reclaimable surplus amount for.", + "surplus": "The surplus amount to make the calculation with, as a fixed point number.", + "tokenCount": "The number of tokens to make the calculation with, as a fixed point number with 18 decimals.", + "totalSupply": "The total number of tokens to make the calculation with, as a fixed point number with 18 decimals." + }, + "returns": { + "_0": "The surplus token amount that can be reclaimed, as a fixed point number with the same number of decimals as the provided `surplus`." + } + }, + "currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)": { + "details": "The surplus is the amount of funds a project has in a terminal in excess of its payout limit.The surplus is represented as a fixed point number with the same amount of decimals as the specified terminal.", + "params": { + "accountingContexts": "The accounting contexts of tokens whose balances should contribute to the surplus being calculated.", + "currency": "The currency the resulting amount should be in terms of.", + "decimals": "The number of decimals to expect in the resulting fixed point number.", + "projectId": "The ID of the project to get surplus for.", + "terminal": "The terminal the surplus is being calculated for." + }, + "returns": { + "_0": "The current surplus amount the project has in the specified terminal." + } + }, + "currentTotalSurplusOf(uint256,uint256,uint256)": { + "params": { + "currency": "The currency that the total surplus should be in terms of.", + "decimals": "The number of decimals that the fixed point surplus should include.", + "projectId": "The ID of the project to get the total surplus for." + }, + "returns": { + "_0": "The current total surplus amount that the project has across all terminals." + } + }, + "recordAddedBalanceFor(uint256,address,uint256)": { + "params": { + "amount": "The amount of terminal tokens added, as a fixed point number with the same amount of decimals as its relative terminal.", + "projectId": "The ID of the project which funds are being added to the balance of.", + "token": "The token being added to the balance." + } + }, + "recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)": { + "details": "Mints the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, mints tokens in proportion with the amount paid.", + "params": { + "amount": "The amount of tokens being paid. Includes the token being paid, their value, the number of decimals included, and the currency of the amount.", + "beneficiary": "The address that should be the beneficiary of anything the payment yields (including project tokens minted by the payment).", + "metadata": "Bytes to send to the data hook, if the project's current ruleset specifies one.", + "payer": "The address that made the payment to the terminal.", + "projectId": "The ID of the project being paid." + }, + "returns": { + "hookSpecifications": "A list of pay hooks, including data and amounts to send to them. The terminal should fulfill these specifications.", + "ruleset": "The ruleset the payment was made during, as a `JBRuleset` struct.", + "tokenCount": "The number of project tokens that were minted, as a fixed point number with 18 decimals." + } + }, + "recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)": { + "params": { + "accountingContext": "The context of the token being paid out.", + "amount": "The amount to pay out (use from the payout limit), as a fixed point number.", + "currency": "The currency of the `amount`. This must match the project's current ruleset's currency.", + "projectId": "The ID of the project that is paying out funds." + }, + "returns": { + "amountPaidOut": "The amount of terminal tokens paid out, as a fixed point number with the same amount of decimals as its relative terminal.", + "ruleset": "The ruleset the payout was made during, as a `JBRuleset` struct." + } + }, + "recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)": { + "details": "Redeems the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, redeems tokens along a redemption bonding curve that is a function of the number of tokens being burned.", + "params": { + "accountingContext": "The accounting context of the token being reclaimed by the redemption.", + "balanceAccountingContexts": "The accounting contexts of the tokens whose balances should contribute to the surplus being reclaimed from.", + "holder": "The account that is redeeming tokens.", + "metadata": "Bytes to send to the data hook, if the project's current ruleset specifies one.", + "projectId": "The ID of the project being redeemed from.", + "redeemCount": "The number of project tokens to redeem, as a fixed point number with 18 decimals." + }, + "returns": { + "hookSpecifications": "A list of redeem hooks, including data and amounts to send to them. The terminal should fulfill these specifications.", + "reclaimAmount": "The amount of tokens reclaimed from the terminal, as a fixed point number with 18 decimals.", + "redemptionRate": "The redemption rate influencing the reclaim amount.", + "ruleset": "The ruleset during the redemption was made during, as a `JBRuleset` struct. This ruleset will have a redemption rate provided by the redemption hook if applicable." + } + }, + "recordTerminalMigration(uint256,address)": { + "params": { + "projectId": "The ID of the project being migrated.", + "token": "The token being migrated." + }, + "returns": { + "balance": "The project's current balance (which is being migrated), as a fixed point number with the same amount of decimals as its relative terminal." + } + }, + "recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)": { + "details": "When surplus allowance is \"used\", it is taken out of the project's surplus within a terminal.", + "params": { + "accountingContext": "The accounting context of the token whose balances should contribute to the surplus allowance being reclaimed from.", + "amount": "The amount to use from the surplus allowance, as a fixed point number.", + "currency": "The currency of the `amount`. Must match the currency of the surplus allowance.", + "projectId": "The ID of the project to use the surplus allowance of." + }, + "returns": { + "ruleset": "The ruleset during the surplus allowance is being used during, as a `JBRuleset` struct.", + "usedAmount": "The amount of terminal tokens used, as a fixed point number with the same amount of decimals as its relative terminal." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "PRICES()": { + "notice": "The contract that exposes price feeds." + }, + "RULESETS()": { + "notice": "The contract storing and managing project rulesets." + }, + "balanceOf(address,uint256,address)": { + "notice": "A project's balance of a specific token within a terminal." + }, + "currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)": { + "notice": "The surplus amount that can currently be reclaimed from a terminal by redeeming the specified number of tokens, based on the total token supply and current surplus." + }, + "currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)": { + "notice": "The current amount of surplus tokens from a terminal that can be reclaimed by redeeming the specified number of tokens, based on the specified total token supply and surplus amounts." + }, + "currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)": { + "notice": "Gets the current surplus amount in a terminal for a specified project." + }, + "currentTotalSurplusOf(uint256,uint256,uint256)": { + "notice": "Gets the current surplus amount for a specified project across all terminals." + }, + "recordAddedBalanceFor(uint256,address,uint256)": { + "notice": "Records funds being added to a project's balance." + }, + "recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)": { + "notice": "Records a payment to a project." + }, + "recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)": { + "notice": "Records a payout from a project." + }, + "recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)": { + "notice": "Records a redemption from a project." + }, + "recordTerminalMigration(uint256,address)": { + "notice": "Records the migration of funds from this store." + }, + "recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)": { + "notice": "Records a use of a project's surplus allowance." + }, + "usedPayoutLimitOf(address,uint256,address,uint256,uint256)": { + "notice": "The currency-denominated amount of funds that a project has already paid out from its payout limit during the current ruleset for each terminal, in terms of the payout limit's currency." + }, + "usedSurplusAllowanceOf(address,uint256,address,uint256,uint256)": { + "notice": "The currency-denominated amounts of funds that a project has used from its surplus allowance during the current ruleset for each terminal, in terms of the surplus allowance's currency." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBTerminalStore.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/JBTokens.json b/deployments/nana-core/optimism_sepolia/JBTokens.json new file mode 100644 index 00000000..b1203533 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/JBTokens.json @@ -0,0 +1,1087 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBTokens", + "address": "0x3295C9c7374E583cb2e6Ed455EAf9908022159D0", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "burnFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimTokensFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "creditBalanceOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployERC20For", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mintFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "projectIdOf", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setTokenFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tokenOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBalanceOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalCreditSupplyOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupplyOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferCreditsFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Burn", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "initialCreditBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "initialTokenBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ClaimTokens", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "initialCreditBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DeployERC20", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "contract IJBToken" + }, + { + "name": "name", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Mint", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "tokensWereClaimed", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetToken", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "newToken", + "type": "address", + "indexed": true, + "internalType": "contract IJBToken" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TransferCredits", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_NAME", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_SYMBOL", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_TOKEN", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_CREDITS", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_FUNDS", + "inputs": [] + }, + { + "type": "error", + "name": "OVERFLOW_ALERT", + "inputs": [] + }, + { + "type": "error", + "name": "PROJECT_ALREADY_HAS_TOKEN", + "inputs": [] + }, + { + "type": "error", + "name": "RECIPIENT_ZERO_ADDRESS", + "inputs": [] + }, + { + "type": "error", + "name": "TOKENS_MUST_HAVE_18_DECIMALS", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_ALREADY_SET", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_FOUND", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_NAME\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_SYMBOL\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_TOKEN\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_CREDITS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_FUNDS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OVERFLOW_ALERT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PROJECT_ALREADY_HAS_TOKEN\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RECIPIENT_ZERO_ADDRESS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKENS_MUST_HAVE_18_DECIMALS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_ALREADY_SET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_FOUND\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"initialCreditBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"initialTokenBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Burn\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"initialCreditBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ClaimTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"DeployERC20\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bool\",\"name\":\"tokensWereClaimed\",\"type\":\"bool\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Mint\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBToken\",\"name\":\"newToken\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetToken\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"TransferCredits\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"burnFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimTokensFor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"creditBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"deployERC20For\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"mintFor\"},{\"inputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"projectIdOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenOf\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalCreditSupplyOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalSupplyOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferCreditsFrom\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burnFrom(address,uint256,uint256)\":{\"details\":\"Credits are burned first, then tokens are burned.Only a project's current controller can burn its tokens.\",\"params\":{\"amount\":\"The amount of tokens to burn.\",\"holder\":\"The address that owns the tokens which are being burned.\",\"projectId\":\"The ID of the project to the burned tokens belong to.\"}},\"claimTokensFor(address,uint256,uint256,address)\":{\"details\":\"Only a project's controller can claim that project's tokens.\",\"params\":{\"amount\":\"The amount of tokens to claim.\",\"beneficiary\":\"The account into which the claimed tokens will go.\",\"holder\":\"The owner of the credits being redeemed.\",\"projectId\":\"The ID of the project whose tokens are being claimed.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"deployERC20For(uint256,string,string,bytes32)\":{\"details\":\"Deploys a project's ERC-20 token contract.Only a project's controller can deploy its token.\",\"params\":{\"name\":\"The ERC-20's name.\",\"projectId\":\"The ID of the project to deploy an ERC-20 token for.\",\"symbol\":\"The ERC-20's symbol.\"},\"returns\":{\"token\":\"The address of the token that was deployed.\"}},\"mintFor(address,uint256,uint256)\":{\"details\":\"Only a project's current controller can mint its tokens.\",\"params\":{\"amount\":\"The amount of tokens to mint.\",\"holder\":\"The address receiving the new tokens.\",\"projectId\":\"The ID of the project to which the tokens belong.\"}},\"setTokenFor(uint256,address)\":{\"details\":\"Only a project's controller can set its token.\",\"params\":{\"projectId\":\"The ID of the project to set the token of.\",\"token\":\"The new token's address.\"}},\"totalBalanceOf(address,uint256)\":{\"params\":{\"holder\":\"The holder to get a balance for.\",\"projectId\":\"The project to get the `_holder`s balance for.\"},\"returns\":{\"balance\":\"The combined token and token credit balance of the `_holder\"}},\"totalSupplyOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the total supply of.\"},\"returns\":{\"totalSupply\":\"The total supply of the project's tokens and token credits.\"}},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"details\":\"Only a project's controller can transfer credits for that project.\",\"params\":{\"amount\":\"The amount of credits to transfer.\",\"holder\":\"The address to transfer credits from.\",\"projectId\":\"The ID of the project whose credits are being transferred.\",\"recipient\":\"The recipient of the credits.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"burnFrom(address,uint256,uint256)\":{\"notice\":\"Burns (destroys) credits or tokens.\"},\"claimTokensFor(address,uint256,uint256,address)\":{\"notice\":\"Redeem credits to claim tokens into a holder's wallet.\"},\"creditBalanceOf(address,uint256)\":{\"notice\":\"Each holder's credit balance for each project.\"},\"deployERC20For(uint256,string,string,bytes32)\":{\"notice\":\"Deploys an ERC-20 token for a project. It will be used when claiming tokens.\"},\"mintFor(address,uint256,uint256)\":{\"notice\":\"Mint (create) new tokens or credits.\"},\"projectIdOf(address)\":{\"notice\":\"Each token's project.\"},\"setTokenFor(uint256,address)\":{\"notice\":\"Set a project's token if not already set.\"},\"tokenOf(uint256)\":{\"notice\":\"Each project's attached token contract.\"},\"totalBalanceOf(address,uint256)\":{\"notice\":\"The total balance a holder has for a specified project, including both tokens and token credits.\"},\"totalCreditSupplyOf(uint256)\":{\"notice\":\"The total supply of credits for each project.\"},\"totalSupplyOf(uint256)\":{\"notice\":\"The total supply for a specific project, including both tokens and token credits.\"},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"notice\":\"Allows a holder to transfer credits to another account.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBTokens.sol\":\"JBTokens\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947\",\"urls\":[\"bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856\",\"dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/Votes.sol\":{\"keccak256\":\"0xb8f69828d41b3594afd7a8c6393565901c205d8b5baf5bd2e42dbac637172979\",\"urls\":[\"bzz-raw://c790253821191ac46b2050d87df820d4209871f90c616381e2c2c00ff3eaac34\",\"dweb:/ipfs/QmcPETTyuZBzDRL39JNXj3SBMdx3Y9o4fPQLSZ27py5Jim\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol\":{\"keccak256\":\"0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818\",\"urls\":[\"bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a\",\"dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol\":{\"keccak256\":\"0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33\",\"urls\":[\"bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb\",\"dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee\",\"urls\":[\"bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2\",\"dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\":{\"keccak256\":\"0x2a650f6e593cfe5ff2e514a17ea7f593ee70cefa1888066bc983a6308acff4b1\",\"urls\":[\"bzz-raw://9a3477b9665a4b6d19f86bf2cfbfa8c08ba41193f15e68c0d75c0cab7e1fc753\",\"dweb:/ipfs/QmbcurrTatN1PBmkCWdrED8zhAqx5ah9Qp6uR8YwkKWA8V\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol\":{\"keccak256\":\"0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad\",\"urls\":[\"bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b\",\"dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"],\"license\":\"MIT\"},\"src/JBERC20.sol\":{\"keccak256\":\"0x3eb0cb3239aad4ee290ae9dec692717b05cd545f55606586c62faae5db24a61b\",\"urls\":[\"bzz-raw://7eef767e6389d1f85ef3acf5d39f4057d84f72ddc3c3101a37794371c4fada7a\",\"dweb:/ipfs/QmSMQRHSbMLZFp4wtHvqXCig7F8EqhXeAX9UvDEHL8gRb3\"],\"license\":\"MIT\"},\"src/JBTokens.sol\":{\"keccak256\":\"0xf88db3b695af2d6e0b824aca8b694c9eb6d7304d39f1d2384bf75845ee08bb74\",\"urls\":[\"bzz-raw://2e060749b067ef6c0543f5f29c2ab4e6374eba5cc744a1602f7cddd58af0938b\",\"dweb:/ipfs/QmUMXHBjiKLQWgvroQkh6tEMKotD7LAG4R6wjviqRiJ52J\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c63430008170033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "burnFrom(address,uint256,uint256)": { + "details": "Credits are burned first, then tokens are burned.Only a project's current controller can burn its tokens.", + "params": { + "amount": "The amount of tokens to burn.", + "holder": "The address that owns the tokens which are being burned.", + "projectId": "The ID of the project to the burned tokens belong to." + } + }, + "claimTokensFor(address,uint256,uint256,address)": { + "details": "Only a project's controller can claim that project's tokens.", + "params": { + "amount": "The amount of tokens to claim.", + "beneficiary": "The account into which the claimed tokens will go.", + "holder": "The owner of the credits being redeemed.", + "projectId": "The ID of the project whose tokens are being claimed." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "deployERC20For(uint256,string,string,bytes32)": { + "details": "Deploys a project's ERC-20 token contract.Only a project's controller can deploy its token.", + "params": { + "name": "The ERC-20's name.", + "projectId": "The ID of the project to deploy an ERC-20 token for.", + "symbol": "The ERC-20's symbol." + }, + "returns": { + "token": "The address of the token that was deployed." + } + }, + "mintFor(address,uint256,uint256)": { + "details": "Only a project's current controller can mint its tokens.", + "params": { + "amount": "The amount of tokens to mint.", + "holder": "The address receiving the new tokens.", + "projectId": "The ID of the project to which the tokens belong." + } + }, + "setTokenFor(uint256,address)": { + "details": "Only a project's controller can set its token.", + "params": { + "projectId": "The ID of the project to set the token of.", + "token": "The new token's address." + } + }, + "totalBalanceOf(address,uint256)": { + "params": { + "holder": "The holder to get a balance for.", + "projectId": "The project to get the `_holder`s balance for." + }, + "returns": { + "balance": "The combined token and token credit balance of the `_holder" + } + }, + "totalSupplyOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the total supply of." + }, + "returns": { + "totalSupply": "The total supply of the project's tokens and token credits." + } + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "details": "Only a project's controller can transfer credits for that project.", + "params": { + "amount": "The amount of credits to transfer.", + "holder": "The address to transfer credits from.", + "projectId": "The ID of the project whose credits are being transferred.", + "recipient": "The recipient of the credits." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "burnFrom(address,uint256,uint256)": { + "notice": "Burns (destroys) credits or tokens." + }, + "claimTokensFor(address,uint256,uint256,address)": { + "notice": "Redeem credits to claim tokens into a holder's wallet." + }, + "creditBalanceOf(address,uint256)": { + "notice": "Each holder's credit balance for each project." + }, + "deployERC20For(uint256,string,string,bytes32)": { + "notice": "Deploys an ERC-20 token for a project. It will be used when claiming tokens." + }, + "mintFor(address,uint256,uint256)": { + "notice": "Mint (create) new tokens or credits." + }, + "projectIdOf(address)": { + "notice": "Each token's project." + }, + "setTokenFor(uint256,address)": { + "notice": "Set a project's token if not already set." + }, + "tokenOf(uint256)": { + "notice": "Each project's attached token contract." + }, + "totalBalanceOf(address,uint256)": { + "notice": "The total balance a holder has for a specified project, including both tokens and token credits." + }, + "totalCreditSupplyOf(uint256)": { + "notice": "The total supply of credits for each project." + }, + "totalSupplyOf(uint256)": { + "notice": "The total supply for a specific project, including both tokens and token credits." + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "notice": "Allows a holder to transfer credits to another account." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBTokens.sol", + "chainId": "11155420", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/optimism_sepolia/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json b/deployments/nana-core/optimism_sepolia/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json new file mode 100644 index 00000000..608badb7 --- /dev/null +++ b/deployments/nana-core/optimism_sepolia/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json @@ -0,0 +1,2005 @@ +{ + "_format": "sphinx-sol-execution-artifact-1", + "transactions": [ + { + "receipt": { + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "contractAddress": null, + "cumulativeGasUsed": "436215", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "392352", + "hash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "index": 1, + "logs": [ + { + "address": "0x8f3301c9Eada5642B5bB12FD047D3EBb2932E619", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x", + "index": 0, + "topics": [ + "0x0b28c2323855bc15db8c13b56a44651fbce72c8c916fd653f08851fb9ab1c62a", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 1, + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "index": 2, + "topics": [ + "0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e7761000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d", + "index": 3, + "topics": [ + "0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", + "0x000000000000000000000000a6b71e26c5e0845f74c812102ca7114b6a896ab2" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + }, + { + "address": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee709552", + "index": 4, + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000000000000008000000000040800000400000000000000000000000000060008000000000000000000004000000000000000000000000000040000000000010000000000400000000000000000000000000000008004200200040000000000000000000000500000000000000000000100000000000000000000000000001010000000000000000000001000000000000000080000000800000000000000000000000000000000000000400000000000000000000000000200002000000000000000000200000000000041000000000000000000000000000000000000000080000001004000000400000000020000000000000100000000000000000", + "status": 1, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2" + }, + "response": { + "accessList": [], + "blockNumber": 8937432, + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "chainId": "11155420", + "data": "0x1688f0b9000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee7095520000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4b63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "400916", + "gasPrice": "1000252", + "hash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "maxFeePerGas": "1000504", + "maxPriorityFeePerGas": "1000000", + "nonce": 146, + "signature": { + "networkV": null, + "r": "0x7d5ded0d5a830834e55a6ae2e185b9911c3826a74e20f411b36f16e6cbe6b514", + "s": "0x0f9adbd7fb58aa8a7c3421ba2a5d1b055474310fef0ed4dc49a6b95f7905d910", + "v": 27 + }, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "contractAddress": null, + "cumulativeGasUsed": "436215", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "392352", + "hash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "index": 1, + "logs": [ + { + "address": "0x8f3301c9Eada5642B5bB12FD047D3EBb2932E619", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x", + "index": 0, + "topics": [ + "0x0b28c2323855bc15db8c13b56a44651fbce72c8c916fd653f08851fb9ab1c62a", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 1, + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "index": 2, + "topics": [ + "0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e7761000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d", + "index": 3, + "topics": [ + "0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", + "0x000000000000000000000000a6b71e26c5e0845f74c812102ca7114b6a896ab2" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + }, + { + "address": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "blockNumber": 8937432, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee709552", + "index": 4, + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235" + ], + "transactionHash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000000000000008000000000040800000400000000000000000000000000060008000000000000000000004000000000000000000000000000040000000000010000000000400000000000000000000000000000008004200200040000000000000000000000500000000000000000000100000000000000000000000000001010000000000000000000001000000000000000080000000800000000000000000000000000000000000000400000000000000000000000000200002000000000000000000200000000000041000000000000000000000000000000000000000080000001004000000400000000020000000000000100000000000000000", + "status": 1, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2" + }, + "response": { + "accessList": [], + "blockNumber": 8937432, + "blockHash": "0x8c3416aa8bdfc816fa13d10bf33ecfc450891e17931b22de295e429ccec45bef", + "chainId": "11155420", + "data": "0x1688f0b9000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee7095520000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4b63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "400916", + "gasPrice": "1000252", + "hash": "0x02ffb9a529b54708645b77772f479100232660d34311ca62b293e89f8d9bbe12", + "maxFeePerGas": "1000504", + "maxPriorityFeePerGas": "1000000", + "nonce": 146, + "signature": { + "networkV": null, + "r": "0x7d5ded0d5a830834e55a6ae2e185b9911c3826a74e20f411b36f16e6cbe6b514", + "s": "0x0f9adbd7fb58aa8a7c3421ba2a5d1b055474310fef0ed4dc49a6b95f7905d910", + "v": 27 + }, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xee26bdde792682058b0879e6dc2120489ceaf652598bcb78605df3921d29215c", + "blockNumber": 8937446, + "contractAddress": null, + "cumulativeGasUsed": "1285306", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "218621", + "hash": "0x735d947ea5180b8a30b340327005c471e04efec61d49dfbc12dfa009b6536fc5", + "index": 4, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xee26bdde792682058b0879e6dc2120489ceaf652598bcb78605df3921d29215c", + "blockNumber": 8937446, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 7, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x25644002a845ef5579b97a91868de1acca8cbf95f0060646b6429b0828468a98" + ], + "transactionHash": "0x735d947ea5180b8a30b340327005c471e04efec61d49dfbc12dfa009b6536fc5", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xee26bdde792682058b0879e6dc2120489ceaf652598bcb78605df3921d29215c", + "blockNumber": 8937446, + "data": "0x000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c7000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "index": 8, + "topics": [ + "0x382c7aec02462c9b086aba9a7f8dbb1fb8bf336e7b624b0149eeca6726d0fb4a", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "transactionHash": "0x735d947ea5180b8a30b340327005c471e04efec61d49dfbc12dfa009b6536fc5", + "transactionIndex": 4 + } + ], + "logsBloom": "0x00000000080000000000000000000000000000000008000000000000004000000040008000000000000000000040000000000000000000000000000000000000004000000000000000000008000000000000000020000000000000100000008000000000020000000000000000000800000000000000000000000008000000000001000000000000000100000000000000000000000000000000800000000000004000000010800000000000000000020000000000000000000000000002000000000000000000200000000008000000000000000000000000000000000020000000000000000000000000000000000000000000000060000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 8937446, + "blockHash": "0xee26bdde792682058b0879e6dc2120489ceaf652598bcb78605df3921d29215c", + "chainId": "11155420", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003848f38f83558025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e80246474100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005cb34dd3f3c9bd6a60dee7d4a7fad1e863d7860ace95ca35e7ee335103b914e9e5ba375ca763f0225cae6f1e23aeada3570f77af94f1a7dca209e93a629867760331cf7cd3076c657e7cb68a43436cfa42fd9ddccbfb6ddce4ae68318799fad6688e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae444000000000000000000000000000000000000000000000000000000000000004121633c363dd8a0f18d8991d070eb702210b013c33baaacd3ff4997347952e4b35329ea8ae6d1ae6fd305f94cd191bbdc99251e3bae89a0e540376e1bdcc17f991b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "229047", + "gasPrice": "1000252", + "hash": "0x735d947ea5180b8a30b340327005c471e04efec61d49dfbc12dfa009b6536fc5", + "maxFeePerGas": "1000504", + "maxPriorityFeePerGas": "1000000", + "nonce": 147, + "signature": { + "networkV": null, + "r": "0xa5e911627f6ac7a988ff877271882eec810d16edf1080b1e49ccb728ae2ced80", + "s": "0x101b33df03f0f63ea545e5efa9fa7f1102374e62cf3538eaca5765987c8ae922", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xee26bdde792682058b0879e6dc2120489ceaf652598bcb78605df3921d29215c", + "blockNumber": 8937446, + "contractAddress": null, + "cumulativeGasUsed": "1285306", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "218621", + "hash": "0x735d947ea5180b8a30b340327005c471e04efec61d49dfbc12dfa009b6536fc5", + "index": 4, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xee26bdde792682058b0879e6dc2120489ceaf652598bcb78605df3921d29215c", + "blockNumber": 8937446, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 7, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x25644002a845ef5579b97a91868de1acca8cbf95f0060646b6429b0828468a98" + ], + "transactionHash": "0x735d947ea5180b8a30b340327005c471e04efec61d49dfbc12dfa009b6536fc5", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xee26bdde792682058b0879e6dc2120489ceaf652598bcb78605df3921d29215c", + "blockNumber": 8937446, + "data": "0x000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c7000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "index": 8, + "topics": [ + "0x382c7aec02462c9b086aba9a7f8dbb1fb8bf336e7b624b0149eeca6726d0fb4a", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "transactionHash": "0x735d947ea5180b8a30b340327005c471e04efec61d49dfbc12dfa009b6536fc5", + "transactionIndex": 4 + } + ], + "logsBloom": "0x00000000080000000000000000000000000000000008000000000000004000000040008000000000000000000040000000000000000000000000000000000000004000000000000000000008000000000000000020000000000000100000008000000000020000000000000000000800000000000000000000000008000000000001000000000000000100000000000000000000000000000000800000000000004000000010800000000000000000020000000000000000000000000002000000000000000000200000000008000000000000000000000000000000000020000000000000000000000000000000000000000000000060000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 8937446, + "blockHash": "0xee26bdde792682058b0879e6dc2120489ceaf652598bcb78605df3921d29215c", + "chainId": "11155420", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003848f38f83558025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e80246474100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005cb34dd3f3c9bd6a60dee7d4a7fad1e863d7860ace95ca35e7ee335103b914e9e5ba375ca763f0225cae6f1e23aeada3570f77af94f1a7dca209e93a629867760331cf7cd3076c657e7cb68a43436cfa42fd9ddccbfb6ddce4ae68318799fad6688e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae444000000000000000000000000000000000000000000000000000000000000004121633c363dd8a0f18d8991d070eb702210b013c33baaacd3ff4997347952e4b35329ea8ae6d1ae6fd305f94cd191bbdc99251e3bae89a0e540376e1bdcc17f991b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "229047", + "gasPrice": "1000252", + "hash": "0x735d947ea5180b8a30b340327005c471e04efec61d49dfbc12dfa009b6536fc5", + "maxFeePerGas": "1000504", + "maxPriorityFeePerGas": "1000000", + "nonce": 147, + "signature": { + "networkV": null, + "r": "0xa5e911627f6ac7a988ff877271882eec810d16edf1080b1e49ccb728ae2ced80", + "s": "0x101b33df03f0f63ea545e5efa9fa7f1102374e62cf3538eaca5765987c8ae922", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 8937459, + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "chainId": "11155420", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000d604e65ec46d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000ee00000000000000000000000000000000000000000000000000000000000003b40000000000000000000000000000000000000000000000000000000000000552000000000000000000000000000000000000000000000000000000000000066800000000000000000000000000000000000000000000000000000000000008300000000000000000000000000000000000000000000000000000000000000c300000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e1410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002242e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002446b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d90519000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c924011fa62d19789bb5c66c8b26c8ff11ad6cc4f86d6039d90d1d4c5b06f8fc4368a4dfd7b2a551d571f10e09439391ae91514c2f3eb0218921c3b7c0b4b469331cf7cd3076c657e7cb68a43436cfa42fd9ddccbfb6ddce4ae68318799fad6688e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000009600000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084f3700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000008644c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c63430008170033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065a864833f1ef5105c3663795ac2c14884336dddd590d624567c91f69e35a7c24200da3827bdd03006b38b9406be1e2613a29d90133f6475e629e78a4a1bb09ea9a6ec4c5ddb78c4dd4d84c2787a190f6f89358627bb3912918828e3eac95a352c3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000002ba00000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000223fdc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000029c44c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fcc753cfa2fc35cd63d192d03151a8c4cacd0ab1205063536d9f4fdf290431edd069b6092816baec20d158c20b22ecba5d55f9839b2f0fd334477a3441e0992abbbab8b5ff6c24ebbd3a3c1510a41a3cc711bdf55b68443f8f4fbb1b853921bdd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae444000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000018200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000017244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061d964c29e50896a0d557626252fe799438e66b27c6926947b7f9a29a4a658f7dac6998c36b76ea1aadaad92f866a9563902a40bc725678156380d140bbd7d294eb6ed4dcd1f1a75d90de282384be8e0806409ddf08a79ef0a7944116e84b7426d260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000010a00000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000fc00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dcc2d00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000ec44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d33b2f23319ecb6d9d10ebc1e187ea6c63a9944bd8263bc33839e2009618120261968e3d2403a0c672729a94da9858d3834e8f17aba33a072c6984d17dffddc3f7d8432a4c273b2f9f2958696c496ffe99a4423eb22a5b66da411466170a294a88e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017d9ea00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000019e44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f5a29e5bd3a543e304be4a089f389fad63354da25aef40ffaf956a062141e8f13e36972bcbb6b41307c69522492c99ce3c27ecc2eeebd8f461a77bac44cebd22e935db24b93a61d7c18faf88f873d70cdb27c5fc09ecbf39f8b09035aefb824dd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003e400000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000377dab00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000003d444c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b6323627ac6bffcd5663be0d97716983ef61804f8369a3c698a84ac9734e30e057f1f7783a3fb74a3f21bb5bbb2881817e17dcef21edf77f685101dcaee87f24adaa8de65657175d74e50c6b812a2fadebe862c14c9b0711cd26b76fdf15050bdd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000011200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e971800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010244c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005eca86d958389b47bf3828c08a1d65e32b458198e1a1008e0299ff7ab830f45553e36972bcbb6b41307c69522492c99ce3c27ecc2eeebd8f461a77bac44cebd22e935db24b93a61d7c18faf88f873d70cdb27c5fc09ecbf39f8b09035aefb824dd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "11476444", + "gasPrice": "1000252", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "maxFeePerGas": "1000504", + "maxPriorityFeePerGas": "1000000", + "nonce": 148, + "signature": { + "networkV": null, + "r": "0x1ff160e28de58641ceece4160b1ab0e77c88fd7419756ba496cd3583f429cb20", + "s": "0x4d4b9c82feb1f24e79d034f3444340b5d72c0740fefab57a68cf135a5baa89b9", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "contractAddress": null, + "cumulativeGasUsed": "11117439", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "10946888", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "index": 2, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 3, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xf4118e466bf11157dadee748f721b9ae5cafee358439273d9ebda412860a863f" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 4, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 5, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 6, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 7, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 8, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 9, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 10, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 11, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 12, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 13, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 14, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 17, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 20, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 21, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 22, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "blockNumber": 8937459, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "transactionIndex": 2 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000000000000000100802000000000080000000000000000804000000000004000080010000000000000000000020200000000000080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000004006000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 8937459, + "blockHash": "0x3684d37e210560f139dcef93bf567c65e8de6bd6967afbcec430f03eb68774c3", + "chainId": "11155420", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000d604e65ec46d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000ee00000000000000000000000000000000000000000000000000000000000003b40000000000000000000000000000000000000000000000000000000000000552000000000000000000000000000000000000000000000000000000000000066800000000000000000000000000000000000000000000000000000000000008300000000000000000000000000000000000000000000000000000000000000c300000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e1410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002242e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002446b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d90519000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c924011fa62d19789bb5c66c8b26c8ff11ad6cc4f86d6039d90d1d4c5b06f8fc4368a4dfd7b2a551d571f10e09439391ae91514c2f3eb0218921c3b7c0b4b469331cf7cd3076c657e7cb68a43436cfa42fd9ddccbfb6ddce4ae68318799fad6688e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000009600000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084f3700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000008644c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c63430008170033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065a864833f1ef5105c3663795ac2c14884336dddd590d624567c91f69e35a7c24200da3827bdd03006b38b9406be1e2613a29d90133f6475e629e78a4a1bb09ea9a6ec4c5ddb78c4dd4d84c2787a190f6f89358627bb3912918828e3eac95a352c3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000002ba00000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000223fdc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000029c44c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fcc753cfa2fc35cd63d192d03151a8c4cacd0ab1205063536d9f4fdf290431edd069b6092816baec20d158c20b22ecba5d55f9839b2f0fd334477a3441e0992abbbab8b5ff6c24ebbd3a3c1510a41a3cc711bdf55b68443f8f4fbb1b853921bdd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae444000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000018200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000017244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061d964c29e50896a0d557626252fe799438e66b27c6926947b7f9a29a4a658f7dac6998c36b76ea1aadaad92f866a9563902a40bc725678156380d140bbd7d294eb6ed4dcd1f1a75d90de282384be8e0806409ddf08a79ef0a7944116e84b7426d260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000010a00000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000fc00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dcc2d00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000ec44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d33b2f23319ecb6d9d10ebc1e187ea6c63a9944bd8263bc33839e2009618120261968e3d2403a0c672729a94da9858d3834e8f17aba33a072c6984d17dffddc3f7d8432a4c273b2f9f2958696c496ffe99a4423eb22a5b66da411466170a294a88e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017d9ea00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000019e44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f5a29e5bd3a543e304be4a089f389fad63354da25aef40ffaf956a062141e8f13e36972bcbb6b41307c69522492c99ce3c27ecc2eeebd8f461a77bac44cebd22e935db24b93a61d7c18faf88f873d70cdb27c5fc09ecbf39f8b09035aefb824dd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000aa37dc0000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003e400000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000377dab00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000003d444c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b6323627ac6bffcd5663be0d97716983ef61804f8369a3c698a84ac9734e30e057f1f7783a3fb74a3f21bb5bbb2881817e17dcef21edf77f685101dcaee87f24adaa8de65657175d74e50c6b812a2fadebe862c14c9b0711cd26b76fdf15050bdd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000011200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e971800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010244c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005eca86d958389b47bf3828c08a1d65e32b458198e1a1008e0299ff7ab830f45553e36972bcbb6b41307c69522492c99ce3c27ecc2eeebd8f461a77bac44cebd22e935db24b93a61d7c18faf88f873d70cdb27c5fc09ecbf39f8b09035aefb824dd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "11476444", + "gasPrice": "1000252", + "hash": "0x05af14bfc01408099e98c4c77a20a156782d0a470d6a38c8e6aa4aac61a56f05", + "maxFeePerGas": "1000504", + "maxPriorityFeePerGas": "1000000", + "nonce": 148, + "signature": { + "networkV": null, + "r": "0x1ff160e28de58641ceece4160b1ab0e77c88fd7419756ba496cd3583f429cb20", + "s": "0x4d4b9c82feb1f24e79d034f3444340b5d72c0740fefab57a68cf135a5baa89b9", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "contractAddress": null, + "cumulativeGasUsed": "10405018", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000253", + "gasUsed": "9790655", + "hash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "index": 7, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 12, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x784b7dfeb7d4ed0c7ced9de3602a09e6c777828e1add8d80d512761c9c97d2ca" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 13, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 14, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 15, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 16, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 17, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 18, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 19, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 20, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 21, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 22, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 29, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 30, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 31, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 32, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040020000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000800000000400100800000000200000000000000000000804000000020004000081010000000000000000000020208400000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 8937472, + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "chainId": "11155420", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000bd24e65ec46d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000006320000000000000000000000000000000000000000000000000000000000000662000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000007980000000000000000000000000000000000000000000000000000000000000b560000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000061800000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000060a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053a10400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005fa44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a0ec1e5e06d8973986618eb1dd97b4151e27fbe8d86869452e75d9bfd0d48b8aece5ce07a613f0970c168ce07fc2e87c14415ae98ab7c673816beeb874a12466d0bc94d0eb6bee02c49ce7f1881993dc4e08bdfb6aa4e3b2aee1014a9cda04d5dd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cfa00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000044a1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000691552bca19d1ee99ab5d08cd04229f70cd23e447c076bf2b48937f96bceb147fece5ce07a613f0970c168ce07fc2e87c14415ae98ab7c673816beeb874a12466d0bc94d0eb6bee02c49ce7f1881993dc4e08bdfb6aa4e3b2aee1014a9cda04d5dd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001058200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000024f2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b416885ceb2a22bdbc531b2e1c629b44ea02e7b651d58fec1b846fdff30e9bff57f1f7783a3fb74a3f21bb5bbb2881817e17dcef21edf77f685101dcaee87f24adaa8de65657175d74e50c6b812a2fadebe862c14c9b0711cd26b76fdf15050bdd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfac700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000dc44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000679dc62eaf6fbad3c69fe35f22a2afe8d22391ad880654e1ef70fbca04588edaaad2d1f7b3f723688b79173aac99f94e4c7fc09a1f676673a3faa52ddfc65ed91a08cd00ffc4d313f27520cd78e992e7e6468e2d580b928f044a57249d3baeb5216ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003a200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033647400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000039244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064948983c5f06e3028a599022836b79eb04f8adf2e48582799114023def3bdd7705db9c90cd3c6e8b818256fe5577dffe00f2641abf45aeb91ca156a050ab15c356dc19f469e0aad1b0a5b93060f06475f728578cfd1f0592345f547ed2dec15cc3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004e44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e22ce5173d08db21ae662a5b2a579c2facddbf81ed034eb3b3b96f6546066320b0f896c642c40bcea7a850947fc4df631eda3b84e16a66a8464900ad5ee21a2cf7d8432a4c273b2f9f2958696c496ffe99a4423eb22a5b66da411466170a294a88e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "10420684", + "gasPrice": "1000253", + "hash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "maxFeePerGas": "1000506", + "maxPriorityFeePerGas": "1000000", + "nonce": 149, + "signature": { + "networkV": null, + "r": "0x7148a618eda9fe21998496a5b378a4a5fdce02d8a1983c176b13e6455e61704b", + "s": "0x1791a756cc74eecb2c526e8325b24c0cb829027c38541b3cce25260ea9c95d13", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "contractAddress": null, + "cumulativeGasUsed": "10405018", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000253", + "gasUsed": "9790655", + "hash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "index": 7, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 12, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x784b7dfeb7d4ed0c7ced9de3602a09e6c777828e1add8d80d512761c9c97d2ca" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 13, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 14, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 15, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 16, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 17, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 18, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 19, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 20, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 21, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 22, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 23, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 24, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 25, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 26, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 27, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 28, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 29, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 30, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x", + "index": 31, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "blockNumber": 8937472, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 32, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "transactionIndex": 7 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040020000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000800000000400100800000000200000000000000000000804000000020004000081010000000000000000000020208400000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 8937472, + "blockHash": "0xd5e4291632b279570dfea46928ace92fb294e0eb257b27be05de2ac0f1c9b2d6", + "chainId": "11155420", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000bd24e65ec46d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000006320000000000000000000000000000000000000000000000000000000000000662000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000007980000000000000000000000000000000000000000000000000000000000000b560000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000061800000000000000000000000000000000000000000000000000000000000aa37dc00000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000060a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053a10400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005fa44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a0ec1e5e06d8973986618eb1dd97b4151e27fbe8d86869452e75d9bfd0d48b8aece5ce07a613f0970c168ce07fc2e87c14415ae98ab7c673816beeb874a12466d0bc94d0eb6bee02c49ce7f1881993dc4e08bdfb6aa4e3b2aee1014a9cda04d5dd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cfa00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000044a1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000691552bca19d1ee99ab5d08cd04229f70cd23e447c076bf2b48937f96bceb147fece5ce07a613f0970c168ce07fc2e87c14415ae98ab7c673816beeb874a12466d0bc94d0eb6bee02c49ce7f1881993dc4e08bdfb6aa4e3b2aee1014a9cda04d5dd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001058200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000024f2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b416885ceb2a22bdbc531b2e1c629b44ea02e7b651d58fec1b846fdff30e9bff57f1f7783a3fb74a3f21bb5bbb2881817e17dcef21edf77f685101dcaee87f24adaa8de65657175d74e50c6b812a2fadebe862c14c9b0711cd26b76fdf15050bdd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfac700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000dc44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000679dc62eaf6fbad3c69fe35f22a2afe8d22391ad880654e1ef70fbca04588edaaad2d1f7b3f723688b79173aac99f94e4c7fc09a1f676673a3faa52ddfc65ed91a08cd00ffc4d313f27520cd78e992e7e6468e2d580b928f044a57249d3baeb5216ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003a200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033647400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000039244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064948983c5f06e3028a599022836b79eb04f8adf2e48582799114023def3bdd7705db9c90cd3c6e8b818256fe5577dffe00f2641abf45aeb91ca156a050ab15c356dc19f469e0aad1b0a5b93060f06475f728578cfd1f0592345f547ed2dec15cc3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004e44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e22ce5173d08db21ae662a5b2a579c2facddbf81ed034eb3b3b96f6546066320b0f896c642c40bcea7a850947fc4df631eda3b84e16a66a8464900ad5ee21a2cf7d8432a4c273b2f9f2958696c496ffe99a4423eb22a5b66da411466170a294a88e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "10420684", + "gasPrice": "1000253", + "hash": "0x40e8a01925a3121af7c26e8fff879164d3ee5cde2abce8303606be7979cbb8b1", + "maxFeePerGas": "1000506", + "maxPriorityFeePerGas": "1000000", + "nonce": 149, + "signature": { + "networkV": null, + "r": "0x7148a618eda9fe21998496a5b378a4a5fdce02d8a1983c176b13e6455e61704b", + "s": "0x1791a756cc74eecb2c526e8325b24c0cb829027c38541b3cce25260ea9c95d13", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "contractAddress": null, + "cumulativeGasUsed": "5962538", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1000252", + "gasUsed": "5665347", + "hash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "index": 3, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 6, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x227524cd266ffd0d4791158ac3765dbbf9bfd3e5213d0e3b000973d58f753b91" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x00000000000000000000000012bb7bcc941b2e5ccef740d0e4317a5b35717d30", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x000000000000000000000000000000000000000000000000000000000000000f", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "blockNumber": 8937487, + "data": "0x", + "index": 10, + "topics": [ + "0x4383d976757d67ca920616be0b6430a681ea9d3dcce8d6d61d4603ca4a9bff63", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "transactionIndex": 3 + } + ], + "logsBloom": "0x00000000080010000008000000080001000000000008000000000000004000000040008000000000000000000040000000000000000000000000000000000000000000000000200400000008020000000000000020000000000000000000000000000000000000000000000000000000000000100020000000000008000000000001000000000080000100000000000000000000000000000000804000000000084000800010000000000000000000020200000000000000000000000006000000000000000000200000000008000000000000000000000000000000000000000000000000000008000000000000000200000000000000000000000008000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 8937487, + "blockHash": "0x85eb904ffd9f2c2a77d6a8bec63347aca3fadc1a6aec2c6f5e2751a6f0ed6dec", + "chainId": "11155420", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000066c4e65ec46d000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000065800000000000000000000000000000000000000000000000000000000000aa37dc000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000064a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057de6c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000063a44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000632c6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000607e821bede987f18c6c09871977c8f3c742eb63af4dbae1b91fdcc80fcf153596262e500528e11a0ed1ff534f822468068e85d6cf62227064de563b7ce8b3c8d0fffe3dde13e85617b8123ed886a63e6fe63c1b29f4d9f490f12bd2ed11f400dd260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "6759578", + "gasPrice": "1000252", + "hash": "0xc22134735d4551845aef761eaf7f33cc4c9054630e6dc987ecf5afe15dd23d91", + "maxFeePerGas": "1000504", + "maxPriorityFeePerGas": "1000000", + "nonce": 150, + "signature": { + "networkV": null, + "r": "0x7a0ac862e60585dc689a68f700e4d07a328ea7c18482ee8b74781e5fe389c71a", + "s": "0x7a1bfbcf49c89e2b7025f0c42744ff963e9cb74c79e595ca204028477875c791", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + } + ], + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "solcInputHashes": [ + "b2112d617c776ac2cceb92d11c578094" + ], + "safeAddress": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "moduleAddress": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "executorAddress": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "nonce": "0", + "chainId": "11155420", + "actions": [ + { + "to": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141", + "value": "0", + "txData": "0x46b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d90519", + "gas": "140334", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c6343000817003300000000000000000000000000000000", + "gas": "544567", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000", + "gas": "2244572", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000", + "gas": "1351808", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000", + "gas": "904237", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000", + "gas": "1563114", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000", + "gas": "3636651", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000", + "gas": "956184", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000000000000000", + "gas": "5480708", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "value": "0", + "txData": "0xa1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed5820000000000000000000000000000000000000000000000000000000000000001", + "gas": "89338", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "value": "0", + "txData": "0xf2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad", + "gas": "66946", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000", + "gas": "785095", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e90000000000000000", + "gas": "3368052", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000", + "gas": "316627", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000632c6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000", + "gas": "5758572", + "operation": 1, + "requireSuccess": true + } + ], + "sphinxConfig": { + "projectName": "nana-core", + "orgId": "cltepuu9u0003j58rjtbd0hvu", + "owners": [ + "0x26416423d530b1931A2a7a6b7D435Fac65eED27d" + ], + "mainnets": [ + "ethereum", + "optimism", + "polygon" + ], + "testnets": [ + "ethereum_sepolia", + "optimism_sepolia", + "polygon_mumbai" + ], + "threshold": "1", + "saltNonce": "0" + }, + "executionMode": 2, + "initialState": { + "isSafeDeployed": false, + "isModuleDeployed": false, + "isExecuting": false + }, + "unlabeledContracts": [], + "arbitraryChain": false, + "libraries": [], + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "safeInitData": "0xb63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBController.json b/deployments/nana-core/polygon_mumbai/JBController.json new file mode 100644 index 00000000..c35210be --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBController.json @@ -0,0 +1,3456 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBController", + "address": "0xdAF6226Aafe296bbCCBEC815133386Cd910Ed582", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "rulesets", + "type": "address", + "internalType": "contract IJBRulesets" + }, + { + "name": "tokens", + "type": "address", + "internalType": "contract IJBTokens" + }, + { + "name": "splits", + "type": "address", + "internalType": "contract IJBSplits" + }, + { + "name": "fundAccessLimits", + "type": "address", + "internalType": "contract IJBFundAccessLimits" + }, + { + "name": "trustedForwarder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FUND_ACCESS_LIMITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBFundAccessLimits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "RULESETS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBRulesets" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SPLITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBSplits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "TOKENS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTokens" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "burnTokensOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimTokensFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "currentRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployERC20For", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTrustedForwarder", + "inputs": [ + { + "name": "forwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestQueuedRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approvalStatus", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "launchProjectFor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "projectUri", + "type": "string", + "internalType": "string" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "terminalConfigurations", + "type": "tuple[]", + "internalType": "struct JBTerminalConfig[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "tokensToAccept", + "type": "address[]", + "internalType": "address[]" + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "launchRulesetsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "terminalConfigurations", + "type": "tuple[]", + "internalType": "struct JBTerminalConfig[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "tokensToAccept", + "type": "address[]", + "internalType": "address[]" + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "migrateController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "to", + "type": "address", + "internalType": "contract IJBMigratable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mintTokensOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "useReservedRate", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "payReservedTokenToTerminal", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + }, + { + "name": "splitAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pendingReservedTokenBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "queueRulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "receiveMigrationFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "contract IERC165" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startingId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "size", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "rulesets", + "type": "tuple[]", + "internalType": "struct JBRulesetWithMetadata[]", + "components": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sendReservedTokensToSplitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setControllerAllowed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setSplitGroupsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTerminalsAllowed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setTokenFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setUriOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalTokenSupplyWithReservedTokensOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferCreditsFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "trustedForwarder", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "upcomingRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uriOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "BurnTokens", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LaunchProject", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LaunchRulesets", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "to", + "type": "address", + "indexed": false, + "internalType": "contract IJBMigratable" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MintTokens", + "inputs": [ + { + "name": "beneficiary", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "reservedRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PrepMigration", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "from", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "QueueRulesets", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservedDistributionReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendReservedTokensToSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendReservedTokensToSplits", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetMetadata", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "CONTROLLER_MIGRATION_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "CREDIT_TRANSFERS_PAUSED", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_BASE_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_REDEMPTION_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RESERVED_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "MINT_NOT_ALLOWED_AND_NOT_TERMINAL_OR_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "NO_BURNABLE_TOKENS", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "RULESET_ALREADY_LAUNCHED", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "ZERO_TOKENS_TO_MINT", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "contractAddress": null, + "cumulativeGasUsed": "9991364", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "9790647", + "hash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "index": 4, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 10, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x3fc7767f098b04907638e00fd7a27902f450f983c63e80014e8720d7ede69959" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 14, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 17, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 20, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 27, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 28, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 29, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 30, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000413803f48aff40000000000000000000000000000000000000000000000000035fd496c3f931d390000000000000000000000000000000000000000000000be84d13e42b3f049e600000000000000000000000000000000000000000000000031e9c92cf6e329390000000000000000000000000000000000000000000000be88e4be81fca03de6", + "index": 31, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000004ce0f825810371ea57fbcba98b2be98e730c10df" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000002008000000800000004000000060008000000000000000000040000080008000000100000000000000040000000000000000208400000008820000800001000020040000000300000000000000020000020000000000000000000800000004100021000080000008000000400001000000000000000100800000000200000000000000000000804000000020204000081010000000000000000000020208400040000080000000000006004000000000000000200081000008000000000000000000040000100002001060000000010000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBRulesets\",\"name\":\"rulesets\",\"type\":\"address\"},{\"internalType\":\"contract IJBTokens\",\"name\":\"tokens\",\"type\":\"address\"},{\"internalType\":\"contract IJBSplits\",\"name\":\"splits\",\"type\":\"address\"},{\"internalType\":\"contract IJBFundAccessLimits\",\"name\":\"fundAccessLimits\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_MIGRATION_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CREDIT_TRANSFERS_PAUSED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_BASE_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_REDEMPTION_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RESERVED_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"MINT_NOT_ALLOWED_AND_NOT_TERMINAL_OR_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NO_BURNABLE_TOKENS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RULESET_ALREADY_LAUNCHED\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ZERO_TOKENS_TO_MINT\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BurnTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"LaunchProject\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"LaunchRulesets\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBMigratable\",\"name\":\"to\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MigrateController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MintTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"PrepMigration\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"QueueRulesets\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ReservedDistributionReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendReservedTokensToSplit\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendReservedTokensToSplits\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetMetadata\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FUND_ACCESS_LIMITS\",\"outputs\":[{\"internalType\":\"contract IJBFundAccessLimits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"RULESETS\",\"outputs\":[{\"internalType\":\"contract IJBRulesets\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"SPLITS\",\"outputs\":[{\"internalType\":\"contract IJBSplits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"TOKENS\",\"outputs\":[{\"internalType\":\"contract IJBTokens\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"burnTokensOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimTokensFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"deployERC20For\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestQueuedRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"approvalStatus\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"projectUri\",\"type\":\"string\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"struct JBTerminalConfig[]\",\"name\":\"terminalConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokensToAccept\",\"type\":\"address[]\"}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"launchProjectFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"struct JBTerminalConfig[]\",\"name\":\"terminalConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokensToAccept\",\"type\":\"address[]\"}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"launchRulesetsFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBMigratable\",\"name\":\"to\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateController\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"useReservedRate\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"mintTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"splitAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"payReservedTokenToTerminal\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"pendingReservedTokenBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"queueRulesetsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IERC165\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"receiveMigrationFrom\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startingId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rulesetsOf\",\"outputs\":[{\"internalType\":\"struct JBRulesetWithMetadata[]\",\"name\":\"rulesets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"sendReservedTokensToSplitsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"setControllerAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setSplitGroupsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"setTerminalsAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setUriOf\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalTokenSupplyWithReservedTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferCreditsFrom\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upcomingRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"uriOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burnTokensOf(address,uint256,uint256,string)\":{\"details\":\"Only a token holder, an operator with the `BURN_TOKENS` permission from them, or a project's terminal can burn a holder's tokens.\",\"params\":{\"holder\":\"The account whose tokens are being burned.\",\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project that the tokens being burned belong to.\",\"tokenCount\":\"The number of tokens to burn.\"}},\"claimTokensFor(address,uint256,uint256,address)\":{\"details\":\"Only a credit holder or an operator with the `CLAIM_TOKENS` permission from that holder can redeem those credits to claim tokens.\",\"params\":{\"amount\":\"The amount of tokens to claim.\",\"beneficiary\":\"The account into which the claimed tokens will go.\",\"holder\":\"The owner of the credits being redeemed.\",\"projectId\":\"The ID of the project whose tokens are being claimed.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"fundAccessLimits\":\"A contract that stores fund access limits for each project.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\",\"rulesets\":\"A contract storing and managing project rulesets.\",\"splits\":\"A contract that stores splits for each project.\",\"tokens\":\"A contract that manages token minting and burning.\"}},\"currentRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The current ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The current ruleset as a `JBRuleset` struct.\"}},\"deployERC20For(uint256,string,string,bytes32)\":{\"details\":\"Deploys a project's ERC-20 token contract.Only a project's owner or an operator with `ISSUE_TOKENS` permission from the owner can deploy its token.\",\"params\":{\"name\":\"The ERC-20's name.\",\"projectId\":\"The ID of the project to deploy an ERC-20 token for.\",\"symbol\":\"The ERC-20's symbol.\"},\"returns\":{\"token\":\"The address of the token that was deployed.\"}},\"getRulesetOf(uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The ruleset as a `JBRuleset` struct.\"}},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"latestQueuedRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"approvalStatus\":\"The approval status of the ruleset.\",\"metadata\":\"The latest queued ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The latest queued ruleset as a `JBRuleset` struct.\"}},\"launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"details\":\"Each operation within this transaction can be done in sequence separately.Anyone can deploy a project on an owner's behalf.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"owner\":\"The address to set as the owner of the project. The project ERC-721 will be owned by this address.\",\"projectUri\":\"A URI to associate with the project. This can be updated any time by the owner of the project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.\",\"rulesetConfigurations\":\"The ruleset configurations to queue.\",\"terminalConfigurations\":\"The terminal configurations to add for the project.\"},\"returns\":{\"projectId\":\"The ID of the project.\"}},\"launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"details\":\"Each operation within this transaction can be done in sequence separately.Only a project's owner or an operator with the `QUEUE_RULESETS` permission can launch rulesets for a project.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project to launch rulesets for.\",\"rulesetConfigurations\":\"The ruleset configurations to queue.\",\"terminalConfigurations\":\"The terminal configurations to add for the project.\"},\"returns\":{\"rulesetId\":\"The ID of the ruleset that was successfully launched.\"}},\"migrateController(uint256,address)\":{\"details\":\"Only a project's owner or an operator with the `MIGRATE_CONTROLLER` permission from the owner can migrate it.\",\"params\":{\"projectId\":\"The ID of the project that will be migrated from this controller.\",\"to\":\"The controller the project is migrating to.\"}},\"mintTokensOf(uint256,uint256,address,string,bool)\":{\"details\":\"Only a project's owner, an operator with the `MINT_TOKENS` permission from them, one of the project's terminals, or its current data hook can mint a project's tokens.If the ruleset has discretionary minting disabled, this function can only be called by the terminal or data hook.\",\"params\":{\"beneficiary\":\"The account which will receive the (non-reserved) minted tokens.\",\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project the tokens being minted belong to.\",\"tokenCount\":\"The total number of tokens to mint, including any tokens that will be reserved.\",\"useReservedRate\":\"Whether to use the current ruleset's reserved rate in the minting calculations.\"},\"returns\":{\"beneficiaryTokenCount\":\"The number of tokens minted for the beneficiary.\"}},\"payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)\":{\"details\":\"Can only be called by this terminal itself.\",\"params\":{\"beneficiary\":\"The beneficiary of the payment.\",\"metadata\":\"The metadata that gets send to the terminal.\",\"projectId\":\"The projectId that is being paid.\",\"splitAmount\":\"The amount that is being send to the terminal as part of this split.\",\"terminal\":\"The terminal to pay the token to.\",\"token\":\"The token that is being paid.\"}},\"queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)\":{\"details\":\"Only a project's owner or an operator with the `QUEUE_RULESETS` permission from them can queue rulesets for a project.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project that rulesets are being queued for.\",\"rulesetConfigurations\":\"The configurations of the rulesets to queue.\"},\"returns\":{\"rulesetId\":\"The ID of the last ruleset which was successfully queued.\"}},\"receiveMigrationFrom(address,uint256)\":{\"details\":\"This controller should not yet be the project's controller.\",\"params\":{\"from\":\"The controller being migrated from.\",\"projectId\":\"The ID of the project that will be migrated to this controller.\"}},\"rulesetsOf(uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the rulesets of.\",\"size\":\"The maximum number of rulesets to return.\",\"startingId\":\"The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used.\"},\"returns\":{\"rulesets\":\"The rulesets with their metadata as an array of `JBRulesetWithMetadata` structs.\"}},\"sendReservedTokensToSplitsOf(uint256,string)\":{\"details\":\"If the project has no reserved token splits, or they don't add up to 100%, the leftover tokens are minted to the project's owner.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project to which the reserved tokens belong.\"},\"returns\":{\"_0\":\"The amount of reserved tokens minted and sent.\"}},\"setControllerAllowed(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the flag is for.\"},\"returns\":{\"_0\":\"The flag\"}},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"details\":\"Only a project's owner or an operator with `SET_SPLITS` permission from the owner can set its splits through the project's controller.The new split groups must include any currently set splits that are locked.\",\"params\":{\"projectId\":\"The ID of the project split groups are being set for.\",\"rulesetId\":\"The ID of the ruleset the split groups should be active in. Use a `rulesetId` of 0 to set the default split groups which are active when a project's ruleset has no splits set. If no default splits have been set, all splits are sent to the project's owner.\",\"splitGroups\":\"An array of split groups to set.\"}},\"setTerminalsAllowed(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the flag is for.\"},\"returns\":{\"_0\":\"The flag\"}},\"setTokenFor(uint256,address)\":{\"details\":\"Only a project's owner or an operator with `SET_TOKEN` permission from the owner can set its token.\",\"params\":{\"projectId\":\"The ID of the project to set the token of.\",\"token\":\"The new token's address.\"}},\"setUriOf(uint256,string)\":{\"details\":\"Only a project's owner can set its metadata through the project's controller.Frontends typically use an IPFS hash for the metadata content, optionally with the `ipfs://` prefix.\",\"params\":{\"metadata\":\"The metadata content to set.\",\"projectId\":\"The ID of the project to set the metadata of.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"totalTokenSupplyWithReservedTokensOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the total token supply of.\"},\"returns\":{\"_0\":\"The current total token supply of the project, including pending reserved tokens that have not been sent to splits yet.\"}},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"details\":\"Only a credit holder or an operator with the `TRANSFER_TOKENS` permission from that holder can transfer those credits.\",\"params\":{\"amount\":\"The amount of credits to transfer.\",\"holder\":\"The address to transfer credits from.\",\"projectId\":\"The ID of the project whose credits are being transferred.\",\"recipient\":\"The recipient of the credits.\"}},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"upcomingRulesetOf(uint256)\":{\"details\":\"If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The upcoming ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The upcoming ruleset as a `JBRuleset` struct.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"FUND_ACCESS_LIMITS()\":{\"notice\":\"A contract that stores fund access limits for each project.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"RULESETS()\":{\"notice\":\"The contract storing and managing project rulesets.\"},\"SPLITS()\":{\"notice\":\"The contract that stores splits for each project.\"},\"TOKENS()\":{\"notice\":\"The contract that manages token minting and burning.\"},\"burnTokensOf(address,uint256,uint256,string)\":{\"notice\":\"Burns a project's tokens from a specific holder's balance.\"},\"claimTokensFor(address,uint256,uint256,address)\":{\"notice\":\"Redeem credits to claim tokens into a holder's wallet.\"},\"currentRulesetOf(uint256)\":{\"notice\":\"A project's current ruleset along with its metadata.\"},\"deployERC20For(uint256,string,string,bytes32)\":{\"notice\":\"Deploys an ERC-20 token for a project. It will be used when claiming tokens (with credits).\"},\"getRulesetOf(uint256,uint256)\":{\"notice\":\"A get `JBRuleset` and `JBRulesetMetadata` structs for the specified `rulesetId`.\"},\"latestQueuedRulesetOf(uint256)\":{\"notice\":\"The latest ruleset queued for a project. Returns the ruleset's struct, its current approval status, and its metadata.\"},\"launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"notice\":\"Creates a project. This will mint the project's ERC-721 to the specified owner's account, queue its first ruleset, and set up any splits.\"},\"launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"notice\":\"Creates an initial sequence of one or more rulesets for an existing project.\"},\"migrateController(uint256,address)\":{\"notice\":\"Allows a project to migrate from this controller to another one.\"},\"mintTokensOf(uint256,uint256,address,string,bool)\":{\"notice\":\"Mint new project tokens into an account, optionally reserving a portion according to the current ruleset's reserved rate.\"},\"payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)\":{\"notice\":\"Pay the reserved rate tokens to a projects terminal.\"},\"pendingReservedTokenBalanceOf(uint256)\":{\"notice\":\"The reserved token balance that has not yet been realized (sent out to the reserved split group) for a project.\"},\"queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)\":{\"notice\":\"Queues one or more rulesets that will take effect once the current ruleset expires. Rulesets only take effect if they are approved by the previous ruleset's approval hook.\"},\"receiveMigrationFrom(address,uint256)\":{\"notice\":\"Allows other controllers to signal to this one that a migration is expected for the specified project.\"},\"rulesetsOf(uint256,uint256,uint256)\":{\"notice\":\"Get an array of a project's rulesets (with metadata) up to a maximum array size, sorted from latest to earliest.\"},\"sendReservedTokensToSplitsOf(uint256,string)\":{\"notice\":\"Sends a project's pending reserved tokens to its reserved token splits.\"},\"setControllerAllowed(uint256)\":{\"notice\":\"A flag indicating if the project currently allows its controller to be set.\"},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"notice\":\"Sets a project's split groups.\"},\"setTerminalsAllowed(uint256)\":{\"notice\":\"A flag indicating if the project currently allows terminals to be set.\"},\"setTokenFor(uint256,address)\":{\"notice\":\"Set a project's token if not already set.\"},\"setUriOf(uint256,string)\":{\"notice\":\"Set a project's metadata URI content.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"totalTokenSupplyWithReservedTokensOf(uint256)\":{\"notice\":\"Gets the current token supply of a project, including pending reserved tokens.\"},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"notice\":\"Allows a holder to transfer credits to another account.\"},\"upcomingRulesetOf(uint256)\":{\"notice\":\"A project's upcoming ruleset along with its metadata.\"},\"uriOf(uint256)\":{\"notice\":\"The metadata URI for each project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBController.sol\":\"JBController\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBController.sol\":{\"keccak256\":\"0x2098a78f94e5ea023725c3fd27c40ab370f4940b681d7d70425d9c0dc870e818\",\"urls\":[\"bzz-raw://082dae16d5ab57042d17918f2076b9c5d5eb69ca77336311e0caa9a9a60de881\",\"dweb:/ipfs/QmQWZJVzvrTc7P63CjiMDAq4PYnBTG1X4t2ArxNa4RWeYc\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetDataHook.sol\":{\"keccak256\":\"0x3fea9fcab6f0335e67f0f052cf5d3446e9310808f88b5878d21586be00f89f85\",\"urls\":[\"bzz-raw://5506848f471d308a14523f91202d76d960f8255e227d29d34b0892ef70315cae\",\"dweb:/ipfs/QmakRKFctSZobpem1caU2zXqhiPQnaYVa7Y6NdAPAonHaU\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/libraries/JBSplitGroupIds.sol\":{\"keccak256\":\"0x932ca2645d443f04f86c8ffb27b5c58c4fbdc7b5a145fba1d43f1db9bd488a0f\",\"urls\":[\"bzz-raw://fa412d2c5726a868a258cd518648726b0784ab7ac7566376b82ba09680f66227\",\"dweb:/ipfs/QmZvfjBt7PQzTWNzrhysyHBegUbbu4aY2xDzBGnwqMaqnF\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBBeforePayRecordedContext.sol\":{\"keccak256\":\"0x5b04e814da83c7e83ff892ab07eaad6abce6f7b85a75f8da9380e9fc3470bc81\",\"urls\":[\"bzz-raw://11c889aab993fce3e3cc2dedc15fc30dd367e7fef9b7b1bfd6a6a9f248781731\",\"dweb:/ipfs/QmVVtydCD1azeWhGLxA1hthxfLyKzMHZ1eVzCz3a3R5dLy\"],\"license\":\"MIT\"},\"src/structs/JBBeforeRedeemRecordedContext.sol\":{\"keccak256\":\"0x73eadaf6827e82f6ccbe3a1e2b2b7fc6c59cef471f73335041b30ddcc000989d\",\"urls\":[\"bzz-raw://2f3ee84662eed565dbdaed406ef836fffaf55cccd417575578152e5085d0b1f2\",\"dweb:/ipfs/QmaJGFS7hxJsiUdKvbv5BKhSwceDEzKBnt7t5YeNWvYgMK\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "0x3295C9c7374E583cb2e6Ed455EAf9908022159D0", + "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "0x2Fd39295dd948dfBB8Aa7e2508ea5Fc15096682b", + "0xB2b5841DBeF766d4b521221732F9B618fCf34A87" + ], + "bytecode": "0x6101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da581565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876102ae565b6102ae7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb81565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6102ae7f0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b81565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d79091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b16935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da56001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "burnTokensOf(address,uint256,uint256,string)": { + "details": "Only a token holder, an operator with the `BURN_TOKENS` permission from them, or a project's terminal can burn a holder's tokens.", + "params": { + "holder": "The account whose tokens are being burned.", + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project that the tokens being burned belong to.", + "tokenCount": "The number of tokens to burn." + } + }, + "claimTokensFor(address,uint256,uint256,address)": { + "details": "Only a credit holder or an operator with the `CLAIM_TOKENS` permission from that holder can redeem those credits to claim tokens.", + "params": { + "amount": "The amount of tokens to claim.", + "beneficiary": "The account into which the claimed tokens will go.", + "holder": "The owner of the credits being redeemed.", + "projectId": "The ID of the project whose tokens are being claimed." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "fundAccessLimits": "A contract that stores fund access limits for each project.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers.", + "rulesets": "A contract storing and managing project rulesets.", + "splits": "A contract that stores splits for each project.", + "tokens": "A contract that manages token minting and burning." + } + }, + "currentRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The current ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The current ruleset as a `JBRuleset` struct." + } + }, + "deployERC20For(uint256,string,string,bytes32)": { + "details": "Deploys a project's ERC-20 token contract.Only a project's owner or an operator with `ISSUE_TOKENS` permission from the owner can deploy its token.", + "params": { + "name": "The ERC-20's name.", + "projectId": "The ID of the project to deploy an ERC-20 token for.", + "symbol": "The ERC-20's symbol." + }, + "returns": { + "token": "The address of the token that was deployed." + } + }, + "getRulesetOf(uint256,uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The ruleset as a `JBRuleset` struct." + } + }, + "isTrustedForwarder(address)": { + "details": "Indicates whether any particular address is the trusted forwarder." + }, + "latestQueuedRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "approvalStatus": "The approval status of the ruleset.", + "metadata": "The latest queued ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The latest queued ruleset as a `JBRuleset` struct." + } + }, + "launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "details": "Each operation within this transaction can be done in sequence separately.Anyone can deploy a project on an owner's behalf.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "owner": "The address to set as the owner of the project. The project ERC-721 will be owned by this address.", + "projectUri": "A URI to associate with the project. This can be updated any time by the owner of the project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.", + "rulesetConfigurations": "The ruleset configurations to queue.", + "terminalConfigurations": "The terminal configurations to add for the project." + }, + "returns": { + "projectId": "The ID of the project." + } + }, + "launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "details": "Each operation within this transaction can be done in sequence separately.Only a project's owner or an operator with the `QUEUE_RULESETS` permission can launch rulesets for a project.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project to launch rulesets for.", + "rulesetConfigurations": "The ruleset configurations to queue.", + "terminalConfigurations": "The terminal configurations to add for the project." + }, + "returns": { + "rulesetId": "The ID of the ruleset that was successfully launched." + } + }, + "migrateController(uint256,address)": { + "details": "Only a project's owner or an operator with the `MIGRATE_CONTROLLER` permission from the owner can migrate it.", + "params": { + "projectId": "The ID of the project that will be migrated from this controller.", + "to": "The controller the project is migrating to." + } + }, + "mintTokensOf(uint256,uint256,address,string,bool)": { + "details": "Only a project's owner, an operator with the `MINT_TOKENS` permission from them, one of the project's terminals, or its current data hook can mint a project's tokens.If the ruleset has discretionary minting disabled, this function can only be called by the terminal or data hook.", + "params": { + "beneficiary": "The account which will receive the (non-reserved) minted tokens.", + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project the tokens being minted belong to.", + "tokenCount": "The total number of tokens to mint, including any tokens that will be reserved.", + "useReservedRate": "Whether to use the current ruleset's reserved rate in the minting calculations." + }, + "returns": { + "beneficiaryTokenCount": "The number of tokens minted for the beneficiary." + } + }, + "payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)": { + "details": "Can only be called by this terminal itself.", + "params": { + "beneficiary": "The beneficiary of the payment.", + "metadata": "The metadata that gets send to the terminal.", + "projectId": "The projectId that is being paid.", + "splitAmount": "The amount that is being send to the terminal as part of this split.", + "terminal": "The terminal to pay the token to.", + "token": "The token that is being paid." + } + }, + "queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)": { + "details": "Only a project's owner or an operator with the `QUEUE_RULESETS` permission from them can queue rulesets for a project.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project that rulesets are being queued for.", + "rulesetConfigurations": "The configurations of the rulesets to queue." + }, + "returns": { + "rulesetId": "The ID of the last ruleset which was successfully queued." + } + }, + "receiveMigrationFrom(address,uint256)": { + "details": "This controller should not yet be the project's controller.", + "params": { + "from": "The controller being migrated from.", + "projectId": "The ID of the project that will be migrated to this controller." + } + }, + "rulesetsOf(uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the rulesets of.", + "size": "The maximum number of rulesets to return.", + "startingId": "The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used." + }, + "returns": { + "rulesets": "The rulesets with their metadata as an array of `JBRulesetWithMetadata` structs." + } + }, + "sendReservedTokensToSplitsOf(uint256,string)": { + "details": "If the project has no reserved token splits, or they don't add up to 100%, the leftover tokens are minted to the project's owner.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project to which the reserved tokens belong." + }, + "returns": { + "_0": "The amount of reserved tokens minted and sent." + } + }, + "setControllerAllowed(uint256)": { + "params": { + "projectId": "The ID of the project the flag is for." + }, + "returns": { + "_0": "The flag" + } + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "details": "Only a project's owner or an operator with `SET_SPLITS` permission from the owner can set its splits through the project's controller.The new split groups must include any currently set splits that are locked.", + "params": { + "projectId": "The ID of the project split groups are being set for.", + "rulesetId": "The ID of the ruleset the split groups should be active in. Use a `rulesetId` of 0 to set the default split groups which are active when a project's ruleset has no splits set. If no default splits have been set, all splits are sent to the project's owner.", + "splitGroups": "An array of split groups to set." + } + }, + "setTerminalsAllowed(uint256)": { + "params": { + "projectId": "The ID of the project the flag is for." + }, + "returns": { + "_0": "The flag" + } + }, + "setTokenFor(uint256,address)": { + "details": "Only a project's owner or an operator with `SET_TOKEN` permission from the owner can set its token.", + "params": { + "projectId": "The ID of the project to set the token of.", + "token": "The new token's address." + } + }, + "setUriOf(uint256,string)": { + "details": "Only a project's owner can set its metadata through the project's controller.Frontends typically use an IPFS hash for the metadata content, optionally with the `ipfs://` prefix.", + "params": { + "metadata": "The metadata content to set.", + "projectId": "The ID of the project to set the metadata of." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "totalTokenSupplyWithReservedTokensOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the total token supply of." + }, + "returns": { + "_0": "The current total token supply of the project, including pending reserved tokens that have not been sent to splits yet." + } + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "details": "Only a credit holder or an operator with the `TRANSFER_TOKENS` permission from that holder can transfer those credits.", + "params": { + "amount": "The amount of credits to transfer.", + "holder": "The address to transfer credits from.", + "projectId": "The ID of the project whose credits are being transferred.", + "recipient": "The recipient of the credits." + } + }, + "trustedForwarder()": { + "details": "Returns the address of the trusted forwarder." + }, + "upcomingRulesetOf(uint256)": { + "details": "If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The upcoming ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The upcoming ruleset as a `JBRuleset` struct." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "FUND_ACCESS_LIMITS()": { + "notice": "A contract that stores fund access limits for each project." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "RULESETS()": { + "notice": "The contract storing and managing project rulesets." + }, + "SPLITS()": { + "notice": "The contract that stores splits for each project." + }, + "TOKENS()": { + "notice": "The contract that manages token minting and burning." + }, + "burnTokensOf(address,uint256,uint256,string)": { + "notice": "Burns a project's tokens from a specific holder's balance." + }, + "claimTokensFor(address,uint256,uint256,address)": { + "notice": "Redeem credits to claim tokens into a holder's wallet." + }, + "currentRulesetOf(uint256)": { + "notice": "A project's current ruleset along with its metadata." + }, + "deployERC20For(uint256,string,string,bytes32)": { + "notice": "Deploys an ERC-20 token for a project. It will be used when claiming tokens (with credits)." + }, + "getRulesetOf(uint256,uint256)": { + "notice": "A get `JBRuleset` and `JBRulesetMetadata` structs for the specified `rulesetId`." + }, + "latestQueuedRulesetOf(uint256)": { + "notice": "The latest ruleset queued for a project. Returns the ruleset's struct, its current approval status, and its metadata." + }, + "launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "notice": "Creates a project. This will mint the project's ERC-721 to the specified owner's account, queue its first ruleset, and set up any splits." + }, + "launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "notice": "Creates an initial sequence of one or more rulesets for an existing project." + }, + "migrateController(uint256,address)": { + "notice": "Allows a project to migrate from this controller to another one." + }, + "mintTokensOf(uint256,uint256,address,string,bool)": { + "notice": "Mint new project tokens into an account, optionally reserving a portion according to the current ruleset's reserved rate." + }, + "payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)": { + "notice": "Pay the reserved rate tokens to a projects terminal." + }, + "pendingReservedTokenBalanceOf(uint256)": { + "notice": "The reserved token balance that has not yet been realized (sent out to the reserved split group) for a project." + }, + "queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)": { + "notice": "Queues one or more rulesets that will take effect once the current ruleset expires. Rulesets only take effect if they are approved by the previous ruleset's approval hook." + }, + "receiveMigrationFrom(address,uint256)": { + "notice": "Allows other controllers to signal to this one that a migration is expected for the specified project." + }, + "rulesetsOf(uint256,uint256,uint256)": { + "notice": "Get an array of a project's rulesets (with metadata) up to a maximum array size, sorted from latest to earliest." + }, + "sendReservedTokensToSplitsOf(uint256,string)": { + "notice": "Sends a project's pending reserved tokens to its reserved token splits." + }, + "setControllerAllowed(uint256)": { + "notice": "A flag indicating if the project currently allows its controller to be set." + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "notice": "Sets a project's split groups." + }, + "setTerminalsAllowed(uint256)": { + "notice": "A flag indicating if the project currently allows terminals to be set." + }, + "setTokenFor(uint256,address)": { + "notice": "Set a project's token if not already set." + }, + "setUriOf(uint256,string)": { + "notice": "Set a project's metadata URI content." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "totalTokenSupplyWithReservedTokensOf(uint256)": { + "notice": "Gets the current token supply of a project, including pending reserved tokens." + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "notice": "Allows a holder to transfer credits to another account." + }, + "upcomingRulesetOf(uint256)": { + "notice": "A project's upcoming ruleset along with its metadata." + }, + "uriOf(uint256)": { + "notice": "The metadata URI for each project. This is typically an IPFS hash, optionally with the `ipfs://` prefix." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBController.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBDirectory.json b/deployments/nana-core/polygon_mumbai/JBDirectory.json new file mode 100644 index 00000000..fc1266f3 --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBDirectory.json @@ -0,0 +1,970 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBDirectory", + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "controllerOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC165" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "primaryTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setControllerOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "controller", + "type": "address", + "internalType": "contract IERC165" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setIsAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPrimaryTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTerminalsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminals", + "type": "address[]", + "internalType": "contract IJBTerminal[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "terminalsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IJBTerminal[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "controller", + "type": "address", + "indexed": true, + "internalType": "contract IERC165" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetIsAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "indexed": true, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetPrimaryTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "terminal", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetTerminals", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "terminals", + "type": "address[]", + "indexed": false, + "internalType": "contract IJBTerminal[]" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "DUPLICATE_TERMINALS", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PROJECT_ID_IN_DIRECTORY", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "SET_CONTROLLER_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "SET_TERMINALS_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_ACCEPTED", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DUPLICATE_TERMINALS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PROJECT_ID_IN_DIRECTORY\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"SET_CONTROLLER_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"SET_TERMINALS_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_ACCEPTED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IERC165\",\"name\":\"controller\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetIsAllowedToSetFirstController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetPrimaryTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"terminals\",\"type\":\"address[]\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetTerminals\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"controllerOf\",\"outputs\":[{\"internalType\":\"contract IERC165\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isAllowedToSetFirstController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTerminalOf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"primaryTerminalOf\",\"outputs\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC165\",\"name\":\"controller\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setControllerOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setIsAllowedToSetFirstController\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setPrimaryTerminalOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"terminals\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTerminalsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"terminalsOf\",\"outputs\":[{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"\",\"type\":\"address[]\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"owner\":\"The address that will own the contract.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\"}},\"isTerminalOf(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project to check for the terminal.\",\"terminal\":\"The address of the terminal to check for.\"},\"returns\":{\"_0\":\"A flag indicating whether or not the specified terminal is a terminal of the specified project.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"primaryTerminalOf(uint256,address)\":{\"details\":\"The zero address is returned if a terminal isn't found for the specified token.\",\"params\":{\"projectId\":\"The ID of the project to get the primary terminal of.\",\"token\":\"The token the terminal accepts.\"},\"returns\":{\"_0\":\"The address of the primary terminal for the specified project and token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setControllerOf(uint256,address)\":{\"details\":\"A controller can be set if:- The project's ruleset allows setting the controller, and the message sender is the project owner or an operator with the `SET_CONTROLLER` permission from them.- OR the message sender is the project's current controller.- OR an allowedlisted address is setting a controller for a project that doesn't already have a controller.\",\"params\":{\"controller\":\"The address of the new controller to set for the project.\",\"projectId\":\"The ID of the project to set the controller of.\"}},\"setIsAllowedToSetFirstController(address,bool)\":{\"details\":\"Only this contract's owner can call this function.These addresses are known and vetted controllers as well as contracts designed to launch new projects.A project can set its own controller without being on the allow list.If you would like an address/contract allowlisted, please reach out to the contract owner.\",\"params\":{\"addr\":\"The address to allow or not allow.\",\"flag\":\"Whether the address is allowed or not allowed to set first controllers for projects. Use `true` to allow and `false` to not allow.\"}},\"setPrimaryTerminalOf(uint256,address,address)\":{\"details\":\"The primary terminal is where a token should be routed to by default.This is useful in case a project has several terminals connected for a particular token.If setting a newly added terminal and the ruleset doesn't allow new terminals, the caller must be the current controller.\",\"params\":{\"projectId\":\"The ID of the project a primary token is being set for.\",\"terminal\":\"The terminal to make the primary terminal for the project and token.\",\"token\":\"The token to set the primary terminal for.\"}},\"setTerminalsOf(uint256,address[])\":{\"details\":\"Only a project's owner, an operator with the `SET_TERMINALS` permission from the owner, or the project's controller can set its terminals.Unless the caller is the project's controller, the project's ruleset must allow setting terminals.\",\"params\":{\"projectId\":\"The ID of the project to set terminals for.\",\"terminals\":\"An array of terminal addresses to set for the project.\"}},\"terminalsOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the terminals of.\"},\"returns\":{\"_0\":\"An array of terminal addresses.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"controllerOf(uint256)\":{\"notice\":\"The controller, which dictates how terminals interact with tokens and rulesets, for a given project ID.\"},\"isAllowedToSetFirstController(address)\":{\"notice\":\"Addresses allowed to set a project's first controller on their behalf. These addresses/contracts have been vetted and verified by this contract's owner.\"},\"isTerminalOf(uint256,address)\":{\"notice\":\"Check if a specified project uses a specified terminal.\"},\"primaryTerminalOf(uint256,address)\":{\"notice\":\"The primary terminal that a project is using to manage a specified token.\"},\"setControllerOf(uint256,address)\":{\"notice\":\"Set a project's controller. Controllers manage how terminals interact with tokens and rulesets.\"},\"setIsAllowedToSetFirstController(address,bool)\":{\"notice\":\"Add an address/contract to the list of trusted addresses which are allowed to set a first controller for projects.\"},\"setPrimaryTerminalOf(uint256,address,address)\":{\"notice\":\"Set a project's primary terminal for a particular token.\"},\"setTerminalsOf(uint256,address[])\":{\"notice\":\"Set a project's terminals.\"},\"terminalsOf(uint256)\":{\"notice\":\"For given project ID, the terminals which are currently managing that project's funds.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBDirectory.sol\":\"JBDirectory\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBDirectory.sol\":{\"keccak256\":\"0x164ccdbd7d3d67ff89934609c8e9c0340578bef327f02668483fa909b82d4c74\",\"urls\":[\"bzz-raw://7c17e1f8b916022b3997654834a8167875a8e82279b2a937b8949e36b9ff838e\",\"dweb:/ipfs/QmYbKb1JzK22tEENfaf1pHMx8pGkTowMEfrcYYDDpfvdjC\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A" + ], + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6040516331a9108f60e11b81526004810184905261030b907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "owner": "The address that will own the contract.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers." + } + }, + "isTerminalOf(uint256,address)": { + "params": { + "projectId": "The ID of the project to check for the terminal.", + "terminal": "The address of the terminal to check for." + }, + "returns": { + "_0": "A flag indicating whether or not the specified terminal is a terminal of the specified project." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "primaryTerminalOf(uint256,address)": { + "details": "The zero address is returned if a terminal isn't found for the specified token.", + "params": { + "projectId": "The ID of the project to get the primary terminal of.", + "token": "The token the terminal accepts." + }, + "returns": { + "_0": "The address of the primary terminal for the specified project and token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "setControllerOf(uint256,address)": { + "details": "A controller can be set if:- The project's ruleset allows setting the controller, and the message sender is the project owner or an operator with the `SET_CONTROLLER` permission from them.- OR the message sender is the project's current controller.- OR an allowedlisted address is setting a controller for a project that doesn't already have a controller.", + "params": { + "controller": "The address of the new controller to set for the project.", + "projectId": "The ID of the project to set the controller of." + } + }, + "setIsAllowedToSetFirstController(address,bool)": { + "details": "Only this contract's owner can call this function.These addresses are known and vetted controllers as well as contracts designed to launch new projects.A project can set its own controller without being on the allow list.If you would like an address/contract allowlisted, please reach out to the contract owner.", + "params": { + "addr": "The address to allow or not allow.", + "flag": "Whether the address is allowed or not allowed to set first controllers for projects. Use `true` to allow and `false` to not allow." + } + }, + "setPrimaryTerminalOf(uint256,address,address)": { + "details": "The primary terminal is where a token should be routed to by default.This is useful in case a project has several terminals connected for a particular token.If setting a newly added terminal and the ruleset doesn't allow new terminals, the caller must be the current controller.", + "params": { + "projectId": "The ID of the project a primary token is being set for.", + "terminal": "The terminal to make the primary terminal for the project and token.", + "token": "The token to set the primary terminal for." + } + }, + "setTerminalsOf(uint256,address[])": { + "details": "Only a project's owner, an operator with the `SET_TERMINALS` permission from the owner, or the project's controller can set its terminals.Unless the caller is the project's controller, the project's ruleset must allow setting terminals.", + "params": { + "projectId": "The ID of the project to set terminals for.", + "terminals": "An array of terminal addresses to set for the project." + } + }, + "terminalsOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the terminals of." + }, + "returns": { + "_0": "An array of terminal addresses." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "controllerOf(uint256)": { + "notice": "The controller, which dictates how terminals interact with tokens and rulesets, for a given project ID." + }, + "isAllowedToSetFirstController(address)": { + "notice": "Addresses allowed to set a project's first controller on their behalf. These addresses/contracts have been vetted and verified by this contract's owner." + }, + "isTerminalOf(uint256,address)": { + "notice": "Check if a specified project uses a specified terminal." + }, + "primaryTerminalOf(uint256,address)": { + "notice": "The primary terminal that a project is using to manage a specified token." + }, + "setControllerOf(uint256,address)": { + "notice": "Set a project's controller. Controllers manage how terminals interact with tokens and rulesets." + }, + "setIsAllowedToSetFirstController(address,bool)": { + "notice": "Add an address/contract to the list of trusted addresses which are allowed to set a first controller for projects." + }, + "setPrimaryTerminalOf(uint256,address,address)": { + "notice": "Set a project's primary terminal for a particular token." + }, + "setTerminalsOf(uint256,address[])": { + "notice": "Set a project's terminals." + }, + "terminalsOf(uint256)": { + "notice": "For given project ID, the terminals which are currently managing that project's funds." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBDirectory.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBFeelessAddresses.json b/deployments/nana-core/polygon_mumbai/JBFeelessAddresses.json new file mode 100644 index 00000000..b9e8e789 --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBFeelessAddresses.json @@ -0,0 +1,544 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBFeelessAddresses", + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isFeeless", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setFeelessAddress", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetFeelessAddress", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "isFeeless", + "type": "bool", + "indexed": true, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "contractAddress": null, + "cumulativeGasUsed": "9991364", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "9790647", + "hash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "index": 4, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 10, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x3fc7767f098b04907638e00fd7a27902f450f983c63e80014e8720d7ede69959" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 14, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 17, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 20, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 27, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 28, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 29, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 30, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000413803f48aff40000000000000000000000000000000000000000000000000035fd496c3f931d390000000000000000000000000000000000000000000000be84d13e42b3f049e600000000000000000000000000000000000000000000000031e9c92cf6e329390000000000000000000000000000000000000000000000be88e4be81fca03de6", + "index": 31, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000004ce0f825810371ea57fbcba98b2be98e730c10df" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000002008000000800000004000000060008000000000000000000040000080008000000100000000000000040000000000000000208400000008820000800001000020040000000300000000000000020000020000000000000000000800000004100021000080000008000000400001000000000000000100800000000200000000000000000000804000000020204000081010000000000000000000020208400040000080000000000006004000000000000000200081000008000000000000000000040000100002001060000000010000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"isFeeless\",\"type\":\"bool\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetFeelessAddress\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isFeeless\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setFeelessAddress\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"owner\":\"The address that will own this contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setFeelessAddress(address,bool)\":{\"details\":\"Only the owner of this contract can set addresses as feeless or not feeless.Feeless addresses can receive payouts without incurring a fee.Feeless addresses can use the surplus allowance without incurring a fee.Feeless addresses can be the beneficary of redemptions without incurring a fee.\",\"params\":{\"addr\":\"The address to make feeless or not feeless.\",\"flag\":\"A flag indicating whether the `address` should be made feeless or not feeless.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isFeeless(address)\":{\"notice\":\"Feeless addresses for this terminal.\"},\"setFeelessAddress(address,bool)\":{\"notice\":\"Sets an address as feeless or not feeless for this terminal.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBFeelessAddresses.sol\":\"JBFeelessAddresses\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBFeelessAddresses.sol\":{\"keccak256\":\"0x860d0650289bd755ecd25b7be4b2f0bb7b8432e267da9437bb928322d3c217a7\",\"urls\":[\"bzz-raw://0fa76cec4171ad3dfadb8228773300c41068d1892926a47c0766fa37012ca9db\",\"dweb:/ipfs/QmSEbFm4kmBrVNRBgw6bmhwwPVNQxcm3dYrZhJsaxDEsVN\"],\"license\":\"MIT\"},\"src/interfaces/IJBFeelessAddresses.sol\":{\"keccak256\":\"0xe5df42cfa71c5fa41b905c122de5825df13c2aab2f9cc4cf4bafa331dd69c27e\",\"urls\":[\"bzz-raw://3773bf3b42cc57d1e4086147e52135ff1dbff4309c45ca0398f821dfaa071563\",\"dweb:/ipfs/QmXUEJssHaxYKfV33tMZGf81JTR5a5yxEVshzNus84xLuT\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "owner": "The address that will own this contract." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "setFeelessAddress(address,bool)": { + "details": "Only the owner of this contract can set addresses as feeless or not feeless.Feeless addresses can receive payouts without incurring a fee.Feeless addresses can use the surplus allowance without incurring a fee.Feeless addresses can be the beneficary of redemptions without incurring a fee.", + "params": { + "addr": "The address to make feeless or not feeless.", + "flag": "A flag indicating whether the `address` should be made feeless or not feeless." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "isFeeless(address)": { + "notice": "Feeless addresses for this terminal." + }, + "setFeelessAddress(address,bool)": { + "notice": "Sets an address as feeless or not feeless for this terminal." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBFeelessAddresses.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBFundAccessLimits.json b/deployments/nana-core/polygon_mumbai/JBFundAccessLimits.json new file mode 100644 index 00000000..63d083fe --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBFundAccessLimits.json @@ -0,0 +1,877 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBFundAccessLimits", + "address": "0x2Fd39295dd948dfBB8Aa7e2508ea5Fc15096682b", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "payoutLimitOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "payoutLimit", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "payoutLimitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setFundAccessLimitsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "fundAccessLimitGroup", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "surplusAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "surplusAllowance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "surplusAllowancesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "SetFundAccessLimits", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "limits", + "type": "tuple", + "indexed": false, + "internalType": "struct JBFundAccessLimitGroup", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBFundAccessLimitGroup\",\"name\":\"limits\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetFundAccessLimits\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"payoutLimitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"payoutLimit\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"payoutLimitsOf\",\"outputs\":[{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroup\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setFundAccessLimitsFor\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"surplusAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"surplusAllowance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"surplusAllowancesOf\",\"outputs\":[{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"payoutLimitOf(uint256,uint256,address,address,uint256)\":{\"details\":\"The fixed point amount returned will have the same number of decimals as the specified terminal.\",\"params\":{\"currency\":\"The currency the payout limit is denominated in.\",\"projectId\":\"The ID of the project to get the payout limit of.\",\"rulesetId\":\"The ID of the ruleset the payout limit applies to.\",\"terminal\":\"The terminal the payout limit applies to.\",\"token\":\"The token the payout limit applies to.\"},\"returns\":{\"payoutLimit\":\"The payout limit, as a fixed point number with the same number of decimals as the provided terminal.\"}},\"payoutLimitsOf(uint256,uint256,address,address)\":{\"details\":\"The fixed point `amount`s of the returned structs will have the same number of decimals as the specified terminal.\",\"params\":{\"projectId\":\"The ID of the project to get the payout limits of.\",\"rulesetId\":\"The ID of the ruleset the payout limits apply to.\",\"terminal\":\"The terminal the payout limits apply to.\",\"token\":\"The token the payout limits apply to.\"},\"returns\":{\"payoutLimits\":\"The payout limits.\"}},\"setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])\":{\"details\":\"Only a project's current controller can set its fund access limits.Payout limits and surplus allowances must be specified in strictly increasing order (by currency) to prevent duplicates.\",\"params\":{\"fundAccessLimitGroup\":\"An array containing payout limits and surplus allowances for each payment terminal. Amounts are fixed point numbers using the same number of decimals as the accompanying terminal.\",\"projectId\":\"The ID of the project whose fund access limits are being set.\",\"rulesetId\":\"The ID of the ruleset that the limits will apply within.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"surplusAllowanceOf(uint256,uint256,address,address,uint256)\":{\"details\":\"The fixed point amount returned will have the same number of decimals as the specified terminal.\",\"params\":{\"currency\":\"The currency that the surplus allowance is denominated in.\",\"projectId\":\"The ID of the project to get the surplus allowance of.\",\"rulesetId\":\"The ID of the ruleset the surplus allowance applies to.\",\"terminal\":\"The terminal the surplus allowance applies to.\",\"token\":\"The token the surplus allowance applies to.\"},\"returns\":{\"surplusAllowance\":\"The surplus allowance, as a fixed point number with the same number of decimals as the provided terminal.\"}},\"surplusAllowancesOf(uint256,uint256,address,address)\":{\"details\":\"The number of decimals in the returned fixed point amount is the same as that of the specified terminal.\",\"params\":{\"projectId\":\"The ID of the project to get the surplus allowances of.\",\"rulesetId\":\"The ID of the ruleset the surplus allowances applies to.\",\"terminal\":\"The terminal the surplus allowances applies to.\",\"token\":\"The token the surplus allowances applies to.\"},\"returns\":{\"surplusAllowances\":\"The surplus allowances.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"payoutLimitOf(uint256,uint256,address,address,uint256)\":{\"notice\":\"A project's payout limit for a specific currency and a given ruleset, terminal, and token.\"},\"payoutLimitsOf(uint256,uint256,address,address)\":{\"notice\":\"A project's payout limits for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from the terminal during the ruleset is dictated by a list of payout limits. Each payout limit is in terms of its own amount and currency.\"},\"setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])\":{\"notice\":\"Sets limits for the amount of funds a project can access from its terminals during a ruleset.\"},\"surplusAllowanceOf(uint256,uint256,address,address,uint256)\":{\"notice\":\"A project's surplus allowance for a specific currency and a given ruleset, terminal, and token.\"},\"surplusAllowancesOf(uint256,uint256,address,address)\":{\"notice\":\"A project's surplus allowances for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from its surplus in a terminal during the ruleset is dictated by a list of surplus allowances. Each surplus allowance is in terms of its own amount and currency.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBFundAccessLimits.sol\":\"JBFundAccessLimits\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBFundAccessLimits.sol\":{\"keccak256\":\"0xf9217afc7b06699040803d425eb288703bd1e5f8e99edd17c8aed2abd6bc6b46\",\"urls\":[\"bzz-raw://e835efc129cb277c436005a73facb8797e3594cf607cfdd823c15449503a61cd\",\"dweb:/ipfs/QmYLKkFk99pGZD89XHvMXhvEk8DecgL6jf53RLnk8HMbQk\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "payoutLimitOf(uint256,uint256,address,address,uint256)": { + "details": "The fixed point amount returned will have the same number of decimals as the specified terminal.", + "params": { + "currency": "The currency the payout limit is denominated in.", + "projectId": "The ID of the project to get the payout limit of.", + "rulesetId": "The ID of the ruleset the payout limit applies to.", + "terminal": "The terminal the payout limit applies to.", + "token": "The token the payout limit applies to." + }, + "returns": { + "payoutLimit": "The payout limit, as a fixed point number with the same number of decimals as the provided terminal." + } + }, + "payoutLimitsOf(uint256,uint256,address,address)": { + "details": "The fixed point `amount`s of the returned structs will have the same number of decimals as the specified terminal.", + "params": { + "projectId": "The ID of the project to get the payout limits of.", + "rulesetId": "The ID of the ruleset the payout limits apply to.", + "terminal": "The terminal the payout limits apply to.", + "token": "The token the payout limits apply to." + }, + "returns": { + "payoutLimits": "The payout limits." + } + }, + "setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])": { + "details": "Only a project's current controller can set its fund access limits.Payout limits and surplus allowances must be specified in strictly increasing order (by currency) to prevent duplicates.", + "params": { + "fundAccessLimitGroup": "An array containing payout limits and surplus allowances for each payment terminal. Amounts are fixed point numbers using the same number of decimals as the accompanying terminal.", + "projectId": "The ID of the project whose fund access limits are being set.", + "rulesetId": "The ID of the ruleset that the limits will apply within." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "surplusAllowanceOf(uint256,uint256,address,address,uint256)": { + "details": "The fixed point amount returned will have the same number of decimals as the specified terminal.", + "params": { + "currency": "The currency that the surplus allowance is denominated in.", + "projectId": "The ID of the project to get the surplus allowance of.", + "rulesetId": "The ID of the ruleset the surplus allowance applies to.", + "terminal": "The terminal the surplus allowance applies to.", + "token": "The token the surplus allowance applies to." + }, + "returns": { + "surplusAllowance": "The surplus allowance, as a fixed point number with the same number of decimals as the provided terminal." + } + }, + "surplusAllowancesOf(uint256,uint256,address,address)": { + "details": "The number of decimals in the returned fixed point amount is the same as that of the specified terminal.", + "params": { + "projectId": "The ID of the project to get the surplus allowances of.", + "rulesetId": "The ID of the ruleset the surplus allowances applies to.", + "terminal": "The terminal the surplus allowances applies to.", + "token": "The token the surplus allowances applies to." + }, + "returns": { + "surplusAllowances": "The surplus allowances." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "payoutLimitOf(uint256,uint256,address,address,uint256)": { + "notice": "A project's payout limit for a specific currency and a given ruleset, terminal, and token." + }, + "payoutLimitsOf(uint256,uint256,address,address)": { + "notice": "A project's payout limits for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from the terminal during the ruleset is dictated by a list of payout limits. Each payout limit is in terms of its own amount and currency." + }, + "setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])": { + "notice": "Sets limits for the amount of funds a project can access from its terminals during a ruleset." + }, + "surplusAllowanceOf(uint256,uint256,address,address,uint256)": { + "notice": "A project's surplus allowance for a specific currency and a given ruleset, terminal, and token." + }, + "surplusAllowancesOf(uint256,uint256,address,address)": { + "notice": "A project's surplus allowances for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from its surplus in a terminal during the ruleset is dictated by a list of surplus allowances. Each surplus allowance is in terms of its own amount and currency." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBFundAccessLimits.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBMultiTerminal.json b/deployments/nana-core/polygon_mumbai/JBMultiTerminal.json new file mode 100644 index 00000000..4f3bb7af --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBMultiTerminal.json @@ -0,0 +1,2198 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBMultiTerminal", + "address": "0x12bB7Bcc941b2E5cCef740d0e4317a5B35717D30", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "splits", + "type": "address", + "internalType": "contract IJBSplits" + }, + { + "name": "store", + "type": "address", + "internalType": "contract IJBTerminalStore" + }, + { + "name": "feelessAddresses", + "type": "address", + "internalType": "contract IJBFeelessAddresses" + }, + { + "name": "permit2", + "type": "address", + "internalType": "contract IPermit2" + }, + { + "name": "trustedForwarder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FEE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FEELESS_ADDRESSES", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBFeelessAddresses" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMIT2", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPermit2" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SPLITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBSplits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STORE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTerminalStore" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accountingContextForTokenOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accountingContextsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addAccountingContextsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokens", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addToBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "shouldReturnHeldFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "currentSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "executePayout", + "inputs": [ + { + "name": "split", + "type": "tuple", + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "originalMessageSender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "netPayoutAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeProcessFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "feeTerminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "heldFeesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct JBFee[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "unlockTimestamp", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTrustedForwarder", + "inputs": [ + { + "name": "forwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "migrateBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pay", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "minReturnedTokens", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "processHeldFeesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redeemTokensOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenToReclaim", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensReclaimed", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "reclaimAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "sendPayoutsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "trustedForwarder", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "useAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensPaidOut", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddToBalance", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "unlockedFees", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FeeReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "feeProjectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HoldFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HookAfterRecordPay", + "inputs": [ + { + "name": "hook", + "type": "address", + "indexed": true, + "internalType": "contract IJBPayHook" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAfterPayRecordedContext", + "components": [ + { + "name": "payer", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "forwardedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectTokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "hookMetadata", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "payerMetadata", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "specificationAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HookAfterRecordRedeem", + "inputs": [ + { + "name": "hook", + "type": "address", + "indexed": true, + "internalType": "contract IJBRedeemHook" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAfterRedeemRecordedContext", + "components": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reclaimedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "forwardedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "hookMetadata", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "redeemerMetadata", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "specificationAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Pay", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "payer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PayoutReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProcessFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "wasHeld", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RedeemTokens", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "holder", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reclaimedAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReturnHeldFees", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "returnedFees", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "leftoverAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendPayoutToSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "netAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendPayouts", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryDistributionAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetAccountingContext", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UseAllowance", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "netAmountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ACCOUNTING_CONTEXT_ALREADY_SET", + "inputs": [] + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_PAYOUT_AMOUNT", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_RECLAIM_AMOUNT", + "inputs": [] + }, + { + "type": "error", + "name": "NO_MSG_VALUE_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "OVERFLOW_ALERT", + "inputs": [] + }, + { + "type": "error", + "name": "PERMIT_ALLOWANCE_NOT_ENOUGH", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TERMINAL_TOKENS_INCOMPATIBLE", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_ACCEPTED", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "UNDER_MIN_RETURNED_TOKENS", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "contractAddress": null, + "cumulativeGasUsed": "6385726", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "5665339", + "hash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "index": 3, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 14, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x8e0bab57bdbca8e06c9fb556904e519687719ec9808e4f263de92ed449e0dde9" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x00000000000000000000000012bb7bcc941b2e5ccef740d0e4317a5b35717d30", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x000000000000000000000000000000000000000000000000000000000000000f", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x", + "index": 18, + "topics": [ + "0x4383d976757d67ca920616be0b6430a681ea9d3dcce8d6d61d4603ca4a9bff63", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x000000000000000000000000000000000000000000000000025bd1dfc6d0a40000000000000000000000000000000000000000000000000031e9c92cee2242800000000000000000000000000000000000000000000000be8d7bc1c13d627f750000000000000000000000000000000000000000000000002f8df74d27519e800000000000000000000000000000000000000000000000be8fd793a104332375", + "index": 19, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000004ce0f825810371ea57fbcba98b2be98e730c10df" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + } + ], + "logsBloom": "0x00000000080010000008000000080000000000000008000000000000004000000040008000000000000000000040000000008000000000200000000000000000000000000000200400000008020000800000000020000000000100000000000000000000000000000000000000000000000004100020000080000008000000000001000000000000000100000000000000000000000000000000804000000000204000800010000000000000000000020200000040000000000000000006004000000000000000200001000008000000000000000000000000100000001000000000000000000008000000000000000200000000000010000000000008100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBSplits\",\"name\":\"splits\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminalStore\",\"name\":\"store\",\"type\":\"address\"},{\"internalType\":\"contract IJBFeelessAddresses\",\"name\":\"feelessAddresses\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ACCOUNTING_CONTEXT_ALREADY_SET\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_PAYOUT_AMOUNT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_RECLAIM_AMOUNT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NO_MSG_VALUE_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OVERFLOW_ALERT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PERMIT_ALLOWANCE_NOT_ENOUGH\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TERMINAL_TOKENS_INCOMPATIBLE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_ACCEPTED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNDER_MIN_RETURNED_TOKENS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"unlockedFees\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddToBalance\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"feeProjectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"FeeReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HoldFee\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBPayHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAfterPayRecordedContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"amount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"forwardedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"hookMetadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"payerMetadata\",\"type\":\"bytes\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"specificationAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HookAfterRecordPay\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBRedeemHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAfterRedeemRecordedContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"reclaimedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"forwardedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"hookMetadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"redeemerMetadata\",\"type\":\"bytes\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"specificationAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HookAfterRecordRedeem\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"to\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MigrateTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Pay\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"PayoutReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"wasHeld\",\"type\":\"bool\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ProcessFee\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"reclaimedAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"RedeemTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"returnedFees\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"leftoverAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ReturnHeldFees\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"netAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendPayoutToSplit\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryDistributionAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendPayouts\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetAccountingContext\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"netAmountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"UseAllowance\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FEELESS_ADDRESSES\",\"outputs\":[{\"internalType\":\"contract IJBFeelessAddresses\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMIT2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"SPLITS\",\"outputs\":[{\"internalType\":\"contract IJBSplits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"STORE\",\"outputs\":[{\"internalType\":\"contract IJBTerminalStore\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"accountingContextForTokenOf\",\"outputs\":[{\"internalType\":\"struct JBAccountingContext\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"accountingContextsOf\",\"outputs\":[{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"addAccountingContextsFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"shouldReturnHeldFees\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"addToBalanceOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalMessageSender\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executePayout\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"netPayoutAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"feeTerminal\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executeProcessFee\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"heldFeesOf\",\"outputs\":[{\"internalType\":\"struct JBFee[]\",\"name\":\"\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"to\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minReturnedTokens\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"pay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"processHeldFeesOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenToReclaim\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensReclaimed\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"redeemTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reclaimAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensPaidOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"sendPayoutsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensPaidOut\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"useAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountingContextForTokenOf(uint256,address)\":{\"details\":\"See the `JBAccountingContext` struct for more information.\",\"params\":{\"projectId\":\"The ID of the project to get token accounting context of.\",\"token\":\"The token to check the accounting context of.\"},\"returns\":{\"_0\":\"The token's accounting context for the token.\"}},\"accountingContextsOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the accepted tokens of.\"},\"returns\":{\"_0\":\"tokenContexts The accounting contexts of the accepted tokens.\"}},\"addAccountingContextsFor(uint256,address[])\":{\"details\":\"Only a project's owner, an operator with the `SET_ACCOUNTING_CONTEXT` permission from that owner, or a project's controller can add accounting contexts for the project.\",\"params\":{\"projectId\":\"The ID of the project having to add accounting contexts for.\",\"tokens\":\"The tokens to add accounting contexts for.\"}},\"addToBalanceOf(uint256,address,uint256,bool,string,bytes)\":{\"details\":\"Adding to balance can unlock held fees if `shouldUnlockHeldFees` is true.\",\"params\":{\"amount\":\"The amount of tokens to add to the balance, as a fixed point number with the same number of decimals as this terminal. If this is a native token terminal, this is ignored and `msg.value` is used instead.\",\"memo\":\"A memo to pass along to the emitted event.\",\"metadata\":\"Extra data to pass along to the emitted event.\",\"projectId\":\"The ID of the project to add funds to the balance of.\",\"shouldReturnHeldFees\":\"A flag indicating if held fees should be returned based on the amount being added.\",\"token\":\"The token being added to the balance.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"feelessAddresses\":\"A contract that stores addresses that shouldn't incur fees when being paid towards or from.\",\"permissions\":\"A contract storing permissions.\",\"permit2\":\"A permit2 utility.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\",\"splits\":\"A contract that stores splits for each project.\",\"store\":\"A contract that stores the terminal's data.\"}},\"currentSurplusOf(uint256,uint256,uint256)\":{\"details\":\"This total surplus only includes tokens that the project accepts (as returned by `accountingContextsOf(...)`).\",\"params\":{\"currency\":\"The currency to express the returned value in terms of.\",\"decimals\":\"The number of decimals to include in the fixed point returned value.\",\"projectId\":\"The ID of the project to get the current total surplus of.\"},\"returns\":{\"_0\":\"The current surplus amount the project has in this terminal, in terms of `currency` and with the specified number of decimals.\"}},\"executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)\":{\"details\":\"Only accepts calls from this terminal itself.\",\"params\":{\"amount\":\"The total amount being paid to the split, as a fixed point number with the same number of decimals as this terminal.\",\"projectId\":\"The ID of the project the split belongs to.\",\"split\":\"The split to pay.\",\"token\":\"The address of the token being paid to the split.\"},\"returns\":{\"netPayoutAmount\":\"The amount sent to the split after subtracting fees.\"}},\"executeProcessFee(uint256,address,uint256,address,address)\":{\"details\":\"Only accepts calls from this terminal itself.\",\"params\":{\"amount\":\"The fee amount, as a fixed point number with 18 decimals.\",\"beneficiary\":\"The address to mint tokens to (from the project which receives fees), and pass along to the ruleset's data hook and pay hook if applicable.\",\"feeTerminal\":\"The terminal that'll receive the fees.\",\"projectId\":\"The ID of the project paying the fee.\",\"token\":\"The token the fee is being paid in.\"}},\"heldFeesOf(uint256,address)\":{\"details\":\"Projects can temporarily hold fees and unlock them later by adding funds to the project's balance.Held fees can be processed at any time by this terminal's owner.\",\"params\":{\"projectId\":\"The ID of the project that is holding fees.\",\"token\":\"The token that the fees are held in.\"}},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"migrateBalanceOf(uint256,address,address)\":{\"details\":\"Only a project's owner or an operator with the `MIGRATE_TERMINAL` permission from that owner can migrate the project's terminal.\",\"params\":{\"projectId\":\"The ID of the project being migrated.\",\"to\":\"The terminal contract being migrated to, which will receive the project's funds and operations.\",\"token\":\"The address of the token being migrated.\"},\"returns\":{\"balance\":\"The amount of funds that were migrated, as a fixed point number with the same amount of decimals as this terminal.\"}},\"pay(uint256,address,uint256,address,uint256,string,bytes)\":{\"params\":{\"amount\":\"The amount of terminal tokens being received, as a fixed point number with the same number of decimals as this terminal. If this terminal's token is native, this is ignored and `msg.value` is used in its place.\",\"beneficiary\":\"The address to mint tokens to, and pass along to the ruleset's data hook and pay hook if applicable.\",\"memo\":\"A memo to pass along to the emitted event.\",\"metadata\":\"Bytes to pass along to the emitted event, as well as the data hook and pay hook if applicable.\",\"minReturnedTokens\":\"The minimum number of project tokens expected in return for this payment, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the payment is reverted.\",\"projectId\":\"The ID of the project being paid.\",\"token\":\"The token being paid.\"},\"returns\":{\"beneficiaryTokenCount\":\"The number of tokens minted to the beneficiary, as a fixed point number with 18 decimals.\"}},\"processHeldFeesOf(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project to process held fees for.\",\"token\":\"The token to process held fees for.\"}},\"redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)\":{\"details\":\"Only a token's holder or an operator with the `REDEEM_TOKENS` permission from that holder can redeem those tokens.\",\"params\":{\"beneficiary\":\"The address to send the reclaimed terminal tokens to, and to pass along to the ruleset's data hook and redeem hook if applicable.\",\"holder\":\"The account whose tokens are being redeemed.\",\"metadata\":\"Bytes to send along to the emitted event, as well as the data hook and redeem hook if applicable.\",\"minTokensReclaimed\":\"The minimum number of terminal tokens expected in return, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the redemption is reverted.\",\"projectId\":\"The ID of the project the project tokens belong to.\",\"redeemCount\":\"The number of project tokens to redeem, as a fixed point number with 18 decimals.\",\"tokenToReclaim\":\"The token being reclaimed.\"},\"returns\":{\"reclaimAmount\":\"The amount of terminal tokens that the project tokens were redeemed for, as a fixed point number with 18 decimals.\"}},\"sendPayoutsOf(uint256,address,uint256,uint256,uint256)\":{\"details\":\"If the percentages of the splits in the project's payout split group do not add up to 100%, the remainder is sent to the project's owner.Anyone can send payouts on a project's behalf. Projects can include a wildcard split (a split with no `hook`, `projectId`, or `beneficiary`) to send funds to the `_msgSender()` which calls this function. This can be used to incentivize calling this function.payouts sent to addresses which aren't feeless incur the protocol fee.Payouts a projects don't incur fees if its terminal is feeless.\",\"params\":{\"amount\":\"The total number of terminal tokens to send, as a fixed point number with same number of decimals as this terminal.\",\"currency\":\"The expected currency of the payouts being sent. Must match the currency of one of the project's current ruleset's payout limits.\",\"minTokensPaidOut\":\"The minimum number of terminal tokens that the `amount` should be worth (if expressed in terms of this terminal's currency), as a fixed point number with the same number of decimals as this terminal. If the amount of tokens paid out would be less than this amount, the send is reverted.\",\"projectId\":\"The ID of the project having its payouts sent.\",\"token\":\"The token being sent.\"},\"returns\":{\"amountPaidOut\":\"The total amount paid out.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)\":{\"details\":\"Only a project's owner or an operator with the `USE_ALLOWANCE` permission from that owner can use the surplus allowance.Incurs the protocol fee unless the caller is a feeless address.\",\"params\":{\"amount\":\"The amount of terminal tokens to use from the project's current surplus allowance, as a fixed point number with the same amount of decimals as this terminal.\",\"beneficiary\":\"The address to send the surplus funds to.\",\"currency\":\"The expected currency of the amount being paid out. Must match the currency of one of the project's current ruleset's surplus allowances.\",\"memo\":\"A memo to pass along to the emitted event.\",\"minTokensPaidOut\":\"The minimum number of terminal tokens that should be used from the surplus allowance (including fees), as a fixed point number with 18 decimals. If the amount of surplus used would be less than this amount, the transaction is reverted.\",\"projectId\":\"The ID of the project to use the surplus allowance of.\",\"token\":\"The token being paid out from the surplus.\"},\"returns\":{\"amountPaidOut\":\"The number of tokens that were sent to the beneficiary, as a fixed point number with the same amount of decimals as the terminal.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for PROJECTS.\"},\"FEE()\":{\"notice\":\"The fee percent (out of `JBConstants.MAX_FEE`).\"},\"FEELESS_ADDRESSES()\":{\"notice\":\"The contract that stores addresses that shouldn't incur fees when being paid towards or from.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PERMIT2()\":{\"notice\":\"The permit2 utility.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"SPLITS()\":{\"notice\":\"The contract that stores splits for each project.\"},\"STORE()\":{\"notice\":\"The contract that stores and manages the terminal's data.\"},\"accountingContextForTokenOf(uint256,address)\":{\"notice\":\"A project's accounting context for a token.\"},\"accountingContextsOf(uint256)\":{\"notice\":\"The tokens accepted by a project.\"},\"addAccountingContextsFor(uint256,address[])\":{\"notice\":\"Adds accounting contexts for a project to this terminal so the project can begin accepting the tokens in those contexts.\"},\"addToBalanceOf(uint256,address,uint256,bool,string,bytes)\":{\"notice\":\"Adds funds to a project's balance without minting tokens.\"},\"currentSurplusOf(uint256,uint256,uint256)\":{\"notice\":\"Gets the total current surplus amount in this terminal for a project, in terms of a given currency.\"},\"executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)\":{\"notice\":\"Executes a payout to a split.\"},\"executeProcessFee(uint256,address,uint256,address,address)\":{\"notice\":\"Process a specified amount of fees for a project.\"},\"heldFeesOf(uint256,address)\":{\"notice\":\"Fees that are being held for a project.\"},\"migrateBalanceOf(uint256,address,address)\":{\"notice\":\"Migrate a project's funds and operations to a new terminal that accepts the same token type.\"},\"pay(uint256,address,uint256,address,uint256,string,bytes)\":{\"notice\":\"Pay a project with tokens.\"},\"processHeldFeesOf(uint256,address)\":{\"notice\":\"Process any fees that are being held for the project.\"},\"redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)\":{\"notice\":\"Holders can redeem a project's tokens to reclaim some of that project's surplus tokens, or to trigger rules determined by the current ruleset's data hook and redeem hook.\"},\"sendPayoutsOf(uint256,address,uint256,uint256,uint256)\":{\"notice\":\"Sends payouts to a project's current payout split group, according to its ruleset, up to its current payout limit.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)\":{\"notice\":\"Allows a project to pay out funds from its surplus up to the current surplus allowance.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBMultiTerminal.sol\":\"JBMultiTerminal\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xac3d50e321a48a40b4496970ce725900f13aeb2255b7c1203f5adbe98c4a911a\",\"urls\":[\"bzz-raw://1d7b235b578347dce2d831a76f122e820a7db7e73fd2e47f13bafdcd61c5b066\",\"dweb:/ipfs/QmVAELwambfJa55HfiCoz1kFFh7iYwRYeW5x8si6AFM4iX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"],\"license\":\"MIT\"},\"src/JBMultiTerminal.sol\":{\"keccak256\":\"0xaff1c40be20d39feb7f88fd47571592f19577cf20bd6266d6cd772bc4c4b4192\",\"urls\":[\"bzz-raw://b66818b95b17dd216fbba3bff3a31aea18802fb4203541eed097588530ffcb22\",\"dweb:/ipfs/QmcpXKqXQN8xT5BhTAqAec8hTqVkMehf2mJRuPMpdiamce\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFeelessAddresses.sol\":{\"keccak256\":\"0xe5df42cfa71c5fa41b905c122de5825df13c2aab2f9cc4cf4bafa331dd69c27e\",\"urls\":[\"bzz-raw://3773bf3b42cc57d1e4086147e52135ff1dbff4309c45ca0398f821dfaa071563\",\"dweb:/ipfs/QmXUEJssHaxYKfV33tMZGf81JTR5a5yxEVshzNus84xLuT\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTerminalStore.sol\":{\"keccak256\":\"0x81d5eb6c877f535143d26d2bef7be97dabf95122db4b1c6fdd0adc32ddc704ca\",\"urls\":[\"bzz-raw://551ab223b3498a20ae7e2bb3da7169ffa2c0a9ab3bd22c7387b19d69915809a4\",\"dweb:/ipfs/Qma2n7QtVAHmB7pWQavQnSBCouAfh171KezhYbNNmdT3wH\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBFeeTerminal.sol\":{\"keccak256\":\"0x9bda3d88d71167aa04a6184885341a70336f524ec13e3a06eb6a2c66acd816dc\",\"urls\":[\"bzz-raw://b06a3485c0b3ec2e66b3443263967d73164caf25f7d340f8bea229a700d505ef\",\"dweb:/ipfs/QmRPFfGZs5z1dNKjUixx6sEUavtVNuv9b3XVV45VPP2NHc\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBMultiTerminal.sol\":{\"keccak256\":\"0x9151efa71b127bc60aecfcf71264176e1af35cc7d6e27bdf585df5ef8b1fc687\",\"urls\":[\"bzz-raw://7a5143dbc5e547cf41969787ff7ba20552d33789938dcad7423565891ed55f4f\",\"dweb:/ipfs/QmTJNLgywfnNVLYQygkcZT3uEPKUpqXuRyYuc2Cs38tm6d\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBPayoutTerminal.sol\":{\"keccak256\":\"0x69b290ddc214def38e69711ff2cfdf1c571d33653b25520efd98469f6b49c7fa\",\"urls\":[\"bzz-raw://93703189aa74008878f20d2917e14bc6c1572ebd05a5f1e4e28bf255603d86af\",\"dweb:/ipfs/QmTpopL7jfS3GJNgTjTBcSaFcdGGuynQPwuMZR6UjJXJjh\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBPermitTerminal.sol\":{\"keccak256\":\"0x9efd208aad91b74041850bfeef658b0cb64e756bf00cb811ea758fb6da0d1e76\",\"urls\":[\"bzz-raw://16160e253dfd77c4c00b56b34349519a60def039319ac4a6ae977e0fd409ad14\",\"dweb:/ipfs/QmQhjX4HzeMT1x9JixjpmusxBYiDxr9oh8ySj4fLwjnJoK\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBRedeemTerminal.sol\":{\"keccak256\":\"0xf43f5c6fb4d2de1b547ecfbf662f48c5cbd7d0bf79c4b784e566cb4b71ad7da7\",\"urls\":[\"bzz-raw://0ded83cc745fab54a035614b845a984933a57056ee27adbd60f5896f47015270\",\"dweb:/ipfs/QmWH19MehMdwgnprq6M3JmZVCaLQSd25ZPwhA5tap2PEKL\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBFees.sol\":{\"keccak256\":\"0xa5e36ac6f9da8edd37e0b8bf9e9a8ed3f30a4c87ae863a18cf202adf464d0cd1\",\"urls\":[\"bzz-raw://e2e7730f815932064322989b29352062b54ad5f3086a66fdd57d8842bfd60ac1\",\"dweb:/ipfs/QmbxvkJA2cKYy1UADJBrowRvaBSAAG46XGnQv6wuy4cmZW\"],\"license\":\"MIT\"},\"src/libraries/JBMetadataResolver.sol\":{\"keccak256\":\"0xdbe40563934ac1618c9ba15f92d3efc47383534b5b8889bf5aae092927be9e87\",\"urls\":[\"bzz-raw://630534d226e7b1f86907f48c70b0d5593ad5682936330fe2737082e4383e8a56\",\"dweb:/ipfs/QmfTVQ6M3eVYBJRZH3693Axo7yBoR5mr2YvHHwx6nvJojZ\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFee.sol\":{\"keccak256\":\"0x90531b42853517d6e1d1955966ee6ffef38db901cb96770cfcbb6955f760aab0\",\"urls\":[\"bzz-raw://0fc1971f6fba2ec6092544d3eeea0121a078d9c7967a006029d1ef9d87bda805\",\"dweb:/ipfs/QmYyhRHKGCbSETczF848BHJfqMMGTQw5TeFeTu2nbbHX33\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSingleAllowanceContext.sol\":{\"keccak256\":\"0x5bcd5b3abafe9137ee451b112fcac473b4d48858544279d38d0c56dea5271f44\",\"urls\":[\"bzz-raw://5f17a870c2f1797a18918ab3dc6f404f0224d9e415815c708654a17686cd62c0\",\"dweb:/ipfs/QmWMDffMMrj7ZXquTHSQt8VQm5owo94BdPpJ93NfSp2jrn\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "0xa0D811360b0d49be8d33309D6eAE03D072E30312", + "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "0xB2b5841DBeF766d4b521221732F9B618fCf34A87" + ], + "bytecode": "0x6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033", + "deployedBytecode": "0x6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da581565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031281565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc84181565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba381565b34801561047157600080fd5b507f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876101d4565b3480156104a457600080fd5b506101d47f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8411663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da90911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8419091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303126001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba316906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba36001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8411663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303121691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303129091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a8716148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da90911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8416001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da516906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "accountingContextForTokenOf(uint256,address)": { + "details": "See the `JBAccountingContext` struct for more information.", + "params": { + "projectId": "The ID of the project to get token accounting context of.", + "token": "The token to check the accounting context of." + }, + "returns": { + "_0": "The token's accounting context for the token." + } + }, + "accountingContextsOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the accepted tokens of." + }, + "returns": { + "_0": "tokenContexts The accounting contexts of the accepted tokens." + } + }, + "addAccountingContextsFor(uint256,address[])": { + "details": "Only a project's owner, an operator with the `SET_ACCOUNTING_CONTEXT` permission from that owner, or a project's controller can add accounting contexts for the project.", + "params": { + "projectId": "The ID of the project having to add accounting contexts for.", + "tokens": "The tokens to add accounting contexts for." + } + }, + "addToBalanceOf(uint256,address,uint256,bool,string,bytes)": { + "details": "Adding to balance can unlock held fees if `shouldUnlockHeldFees` is true.", + "params": { + "amount": "The amount of tokens to add to the balance, as a fixed point number with the same number of decimals as this terminal. If this is a native token terminal, this is ignored and `msg.value` is used instead.", + "memo": "A memo to pass along to the emitted event.", + "metadata": "Extra data to pass along to the emitted event.", + "projectId": "The ID of the project to add funds to the balance of.", + "shouldReturnHeldFees": "A flag indicating if held fees should be returned based on the amount being added.", + "token": "The token being added to the balance." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "feelessAddresses": "A contract that stores addresses that shouldn't incur fees when being paid towards or from.", + "permissions": "A contract storing permissions.", + "permit2": "A permit2 utility.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers.", + "splits": "A contract that stores splits for each project.", + "store": "A contract that stores the terminal's data." + } + }, + "currentSurplusOf(uint256,uint256,uint256)": { + "details": "This total surplus only includes tokens that the project accepts (as returned by `accountingContextsOf(...)`).", + "params": { + "currency": "The currency to express the returned value in terms of.", + "decimals": "The number of decimals to include in the fixed point returned value.", + "projectId": "The ID of the project to get the current total surplus of." + }, + "returns": { + "_0": "The current surplus amount the project has in this terminal, in terms of `currency` and with the specified number of decimals." + } + }, + "executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)": { + "details": "Only accepts calls from this terminal itself.", + "params": { + "amount": "The total amount being paid to the split, as a fixed point number with the same number of decimals as this terminal.", + "projectId": "The ID of the project the split belongs to.", + "split": "The split to pay.", + "token": "The address of the token being paid to the split." + }, + "returns": { + "netPayoutAmount": "The amount sent to the split after subtracting fees." + } + }, + "executeProcessFee(uint256,address,uint256,address,address)": { + "details": "Only accepts calls from this terminal itself.", + "params": { + "amount": "The fee amount, as a fixed point number with 18 decimals.", + "beneficiary": "The address to mint tokens to (from the project which receives fees), and pass along to the ruleset's data hook and pay hook if applicable.", + "feeTerminal": "The terminal that'll receive the fees.", + "projectId": "The ID of the project paying the fee.", + "token": "The token the fee is being paid in." + } + }, + "heldFeesOf(uint256,address)": { + "details": "Projects can temporarily hold fees and unlock them later by adding funds to the project's balance.Held fees can be processed at any time by this terminal's owner.", + "params": { + "projectId": "The ID of the project that is holding fees.", + "token": "The token that the fees are held in." + } + }, + "isTrustedForwarder(address)": { + "details": "Indicates whether any particular address is the trusted forwarder." + }, + "migrateBalanceOf(uint256,address,address)": { + "details": "Only a project's owner or an operator with the `MIGRATE_TERMINAL` permission from that owner can migrate the project's terminal.", + "params": { + "projectId": "The ID of the project being migrated.", + "to": "The terminal contract being migrated to, which will receive the project's funds and operations.", + "token": "The address of the token being migrated." + }, + "returns": { + "balance": "The amount of funds that were migrated, as a fixed point number with the same amount of decimals as this terminal." + } + }, + "pay(uint256,address,uint256,address,uint256,string,bytes)": { + "params": { + "amount": "The amount of terminal tokens being received, as a fixed point number with the same number of decimals as this terminal. If this terminal's token is native, this is ignored and `msg.value` is used in its place.", + "beneficiary": "The address to mint tokens to, and pass along to the ruleset's data hook and pay hook if applicable.", + "memo": "A memo to pass along to the emitted event.", + "metadata": "Bytes to pass along to the emitted event, as well as the data hook and pay hook if applicable.", + "minReturnedTokens": "The minimum number of project tokens expected in return for this payment, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the payment is reverted.", + "projectId": "The ID of the project being paid.", + "token": "The token being paid." + }, + "returns": { + "beneficiaryTokenCount": "The number of tokens minted to the beneficiary, as a fixed point number with 18 decimals." + } + }, + "processHeldFeesOf(uint256,address)": { + "params": { + "projectId": "The ID of the project to process held fees for.", + "token": "The token to process held fees for." + } + }, + "redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)": { + "details": "Only a token's holder or an operator with the `REDEEM_TOKENS` permission from that holder can redeem those tokens.", + "params": { + "beneficiary": "The address to send the reclaimed terminal tokens to, and to pass along to the ruleset's data hook and redeem hook if applicable.", + "holder": "The account whose tokens are being redeemed.", + "metadata": "Bytes to send along to the emitted event, as well as the data hook and redeem hook if applicable.", + "minTokensReclaimed": "The minimum number of terminal tokens expected in return, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the redemption is reverted.", + "projectId": "The ID of the project the project tokens belong to.", + "redeemCount": "The number of project tokens to redeem, as a fixed point number with 18 decimals.", + "tokenToReclaim": "The token being reclaimed." + }, + "returns": { + "reclaimAmount": "The amount of terminal tokens that the project tokens were redeemed for, as a fixed point number with 18 decimals." + } + }, + "sendPayoutsOf(uint256,address,uint256,uint256,uint256)": { + "details": "If the percentages of the splits in the project's payout split group do not add up to 100%, the remainder is sent to the project's owner.Anyone can send payouts on a project's behalf. Projects can include a wildcard split (a split with no `hook`, `projectId`, or `beneficiary`) to send funds to the `_msgSender()` which calls this function. This can be used to incentivize calling this function.payouts sent to addresses which aren't feeless incur the protocol fee.Payouts a projects don't incur fees if its terminal is feeless.", + "params": { + "amount": "The total number of terminal tokens to send, as a fixed point number with same number of decimals as this terminal.", + "currency": "The expected currency of the payouts being sent. Must match the currency of one of the project's current ruleset's payout limits.", + "minTokensPaidOut": "The minimum number of terminal tokens that the `amount` should be worth (if expressed in terms of this terminal's currency), as a fixed point number with the same number of decimals as this terminal. If the amount of tokens paid out would be less than this amount, the send is reverted.", + "projectId": "The ID of the project having its payouts sent.", + "token": "The token being sent." + }, + "returns": { + "amountPaidOut": "The total amount paid out." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "trustedForwarder()": { + "details": "Returns the address of the trusted forwarder." + }, + "useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)": { + "details": "Only a project's owner or an operator with the `USE_ALLOWANCE` permission from that owner can use the surplus allowance.Incurs the protocol fee unless the caller is a feeless address.", + "params": { + "amount": "The amount of terminal tokens to use from the project's current surplus allowance, as a fixed point number with the same amount of decimals as this terminal.", + "beneficiary": "The address to send the surplus funds to.", + "currency": "The expected currency of the amount being paid out. Must match the currency of one of the project's current ruleset's surplus allowances.", + "memo": "A memo to pass along to the emitted event.", + "minTokensPaidOut": "The minimum number of terminal tokens that should be used from the surplus allowance (including fees), as a fixed point number with 18 decimals. If the amount of surplus used would be less than this amount, the transaction is reverted.", + "projectId": "The ID of the project to use the surplus allowance of.", + "token": "The token being paid out from the surplus." + }, + "returns": { + "amountPaidOut": "The number of tokens that were sent to the beneficiary, as a fixed point number with the same amount of decimals as the terminal." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for PROJECTS." + }, + "FEE()": { + "notice": "The fee percent (out of `JBConstants.MAX_FEE`)." + }, + "FEELESS_ADDRESSES()": { + "notice": "The contract that stores addresses that shouldn't incur fees when being paid towards or from." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PERMIT2()": { + "notice": "The permit2 utility." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "SPLITS()": { + "notice": "The contract that stores splits for each project." + }, + "STORE()": { + "notice": "The contract that stores and manages the terminal's data." + }, + "accountingContextForTokenOf(uint256,address)": { + "notice": "A project's accounting context for a token." + }, + "accountingContextsOf(uint256)": { + "notice": "The tokens accepted by a project." + }, + "addAccountingContextsFor(uint256,address[])": { + "notice": "Adds accounting contexts for a project to this terminal so the project can begin accepting the tokens in those contexts." + }, + "addToBalanceOf(uint256,address,uint256,bool,string,bytes)": { + "notice": "Adds funds to a project's balance without minting tokens." + }, + "currentSurplusOf(uint256,uint256,uint256)": { + "notice": "Gets the total current surplus amount in this terminal for a project, in terms of a given currency." + }, + "executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)": { + "notice": "Executes a payout to a split." + }, + "executeProcessFee(uint256,address,uint256,address,address)": { + "notice": "Process a specified amount of fees for a project." + }, + "heldFeesOf(uint256,address)": { + "notice": "Fees that are being held for a project." + }, + "migrateBalanceOf(uint256,address,address)": { + "notice": "Migrate a project's funds and operations to a new terminal that accepts the same token type." + }, + "pay(uint256,address,uint256,address,uint256,string,bytes)": { + "notice": "Pay a project with tokens." + }, + "processHeldFeesOf(uint256,address)": { + "notice": "Process any fees that are being held for the project." + }, + "redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)": { + "notice": "Holders can redeem a project's tokens to reclaim some of that project's surplus tokens, or to trigger rules determined by the current ruleset's data hook and redeem hook." + }, + "sendPayoutsOf(uint256,address,uint256,uint256,uint256)": { + "notice": "Sends payouts to a project's current payout split group, according to its ruleset, up to its current payout limit." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)": { + "notice": "Allows a project to pay out funds from its surplus up to the current surplus allowance." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBMultiTerminal.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBPermissions.json b/deployments/nana-core/polygon_mumbai/JBPermissions.json new file mode 100644 index 00000000..50082438 --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBPermissions.json @@ -0,0 +1,644 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBPermissions", + "address": "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasPermission", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasPermissions", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permissionsOf", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setPermissionsFor", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "permissionsData", + "type": "tuple", + "internalType": "struct JBPermissionsData", + "components": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OperatorPermissionsSet", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "indexed": false, + "internalType": "uint256[]" + }, + { + "name": "packed", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "PERMISSION_ID_OUT_OF_BOUNDS", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PERMISSION_ID_OUT_OF_BOUNDS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"packed\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"OperatorPermissionsSet\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"permissionId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasPermissions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"permissionsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"struct JBPermissionsData\",\"name\":\"permissionsData\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\"}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setPermissionsFor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"hasPermission(address,address,uint256,uint256)\":{\"params\":{\"account\":\"The account being operated on behalf of.\",\"operator\":\"The operator to check.\",\"permissionId\":\"The permission ID to check for.\",\"projectId\":\"The project ID that the operator has permission to operate under. 0 represents all projects.\"},\"returns\":{\"_0\":\"A flag indicating whether the operator has the specified permission.\"}},\"hasPermissions(address,address,uint256,uint256[])\":{\"params\":{\"account\":\"The account being operated on behalf of.\",\"operator\":\"The operator to check.\",\"permissionIds\":\"An array of permission IDs to check for.\",\"projectId\":\"The project ID that the operator has permission to operate under. 0 represents all projects.\"},\"returns\":{\"_0\":\"A flag indicating whether the operator has all specified permissions.\"}},\"setPermissionsFor(address,(address,uint256,uint256[]))\":{\"details\":\"Only an address can give permissions to or revoke permissions from its operators.\",\"params\":{\"account\":\"The account setting its operators' permissions.\",\"permissionsData\":\"The data which specifies the permissions the operator is being given.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"hasPermission(address,address,uint256,uint256)\":{\"notice\":\"Check if an operator has a specific permission for a specific address and project ID.\"},\"hasPermissions(address,address,uint256,uint256[])\":{\"notice\":\"Check if an operator has all of the specified permissions for a specific address and project ID.\"},\"permissionsOf(address,address,uint256)\":{\"notice\":\"The permissions that an operator has been given by an account for a specific project.\"},\"setPermissionsFor(address,(address,uint256,uint256[]))\":{\"notice\":\"Sets permissions for an operator.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBPermissions.sol\":\"JBPermissions\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"src/JBPermissions.sol\":{\"keccak256\":\"0x5d7cbebd7ea868bb17b2df9bd68ebc7a6fd5299c75601fe755b53f14c368d963\",\"urls\":[\"bzz-raw://1812675baaafeeb5074c7ddc6f9b5c5344fe5a213534f1a53f92d664ab0e2d02\",\"dweb:/ipfs/QmY9TC8njokB9gfPPEvDbTntNSd59K3hgKQia4oeJurNwr\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [], + "bytecode": "0x60a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "hasPermission(address,address,uint256,uint256)": { + "params": { + "account": "The account being operated on behalf of.", + "operator": "The operator to check.", + "permissionId": "The permission ID to check for.", + "projectId": "The project ID that the operator has permission to operate under. 0 represents all projects." + }, + "returns": { + "_0": "A flag indicating whether the operator has the specified permission." + } + }, + "hasPermissions(address,address,uint256,uint256[])": { + "params": { + "account": "The account being operated on behalf of.", + "operator": "The operator to check.", + "permissionIds": "An array of permission IDs to check for.", + "projectId": "The project ID that the operator has permission to operate under. 0 represents all projects." + }, + "returns": { + "_0": "A flag indicating whether the operator has all specified permissions." + } + }, + "setPermissionsFor(address,(address,uint256,uint256[]))": { + "details": "Only an address can give permissions to or revoke permissions from its operators.", + "params": { + "account": "The account setting its operators' permissions.", + "permissionsData": "The data which specifies the permissions the operator is being given." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "hasPermission(address,address,uint256,uint256)": { + "notice": "Check if an operator has a specific permission for a specific address and project ID." + }, + "hasPermissions(address,address,uint256,uint256[])": { + "notice": "Check if an operator has all of the specified permissions for a specific address and project ID." + }, + "permissionsOf(address,address,uint256)": { + "notice": "The permissions that an operator has been given by an account for a specific project." + }, + "setPermissionsFor(address,(address,uint256,uint256[]))": { + "notice": "Sets permissions for an operator." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBPermissions.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBPrices.json b/deployments/nana-core/polygon_mumbai/JBPrices.json new file mode 100644 index 00000000..3f0614ea --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBPrices.json @@ -0,0 +1,691 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBPrices", + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DEFAULT_PROJECT_ID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addPriceFeedFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "feed", + "type": "address", + "internalType": "contract IJBPriceFeed" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "priceFeedFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPriceFeed" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pricePerUnitOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddPriceFeed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "feed", + "type": "address", + "indexed": false, + "internalType": "contract IJBPriceFeed" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "INVALID_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "PRICE_FEED_ALREADY_EXISTS", + "inputs": [] + }, + { + "type": "error", + "name": "PRICE_FEED_NOT_FOUND", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "contractAddress": null, + "cumulativeGasUsed": "9991364", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "9790647", + "hash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "index": 4, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 10, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x3fc7767f098b04907638e00fd7a27902f450f983c63e80014e8720d7ede69959" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 14, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 17, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 20, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 27, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 28, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 29, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 30, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000413803f48aff40000000000000000000000000000000000000000000000000035fd496c3f931d390000000000000000000000000000000000000000000000be84d13e42b3f049e600000000000000000000000000000000000000000000000031e9c92cf6e329390000000000000000000000000000000000000000000000be88e4be81fca03de6", + "index": 31, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000004ce0f825810371ea57fbcba98b2be98e730c10df" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000002008000000800000004000000060008000000000000000000040000080008000000100000000000000040000000000000000208400000008820000800001000020040000000300000000000000020000020000000000000000000800000004100021000080000008000000400001000000000000000100800000000200000000000000000000804000000020204000081010000000000000000000020208400040000080000000000006004000000000000000200081000008000000000000000000040000100002001060000000010000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_CURRENCY\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PRICE_FEED_ALREADY_EXISTS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PRICE_FEED_NOT_FOUND\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"feed\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddPriceFeed\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DEFAULT_PROJECT_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"feed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"addPriceFeedFor\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"priceFeedFor\",\"outputs\":[{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"pricePerUnitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addPriceFeedFor(uint256,uint256,uint256,address)\":{\"details\":\"Existing feeds can't be modified. Neither can feeds that have already been set as defaults (project ID 0).\",\"params\":{\"feed\":\"The price feed being added.\",\"pricingCurrency\":\"The currency the feed's resulting price is in terms of.\",\"unitCurrency\":\"The currency being priced by the feed.\"}},\"constructor\":{\"params\":{\"owner\":\"The address that will own the contract.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pricePerUnitOf(uint256,uint256,uint256,uint256)\":{\"params\":{\"decimals\":\"The number of decimals the returned fixed point price should include.\",\"pricingCurrency\":\"The currency the feed's resulting price is in terms of.\",\"projectId\":\"The ID of the project to check the feed for. Feeds stored in ID 0 are used by default for all projects.\",\"unitCurrency\":\"The currency being priced by the feed.\"},\"returns\":{\"_0\":\"The `pricingCurrency` price of 1 `unitCurrency`, as a fixed point number with the specified number of decimals.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DEFAULT_PROJECT_ID()\":{\"notice\":\"The ID to store default values in.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"addPriceFeedFor(uint256,uint256,uint256,address)\":{\"notice\":\"Add a price feed for the `unitCurrency`, priced in terms of the `pricingCurrency`.\"},\"priceFeedFor(uint256,uint256,uint256)\":{\"notice\":\"The available price feeds.\"},\"pricePerUnitOf(uint256,uint256,uint256,uint256)\":{\"notice\":\"Gets the `pricingCurrency` cost for one unit of the `unitCurrency`.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBPrices.sol\":\"JBPrices\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBPrices.sol\":{\"keccak256\":\"0x72a9d8378947113c1e6c20afb09936eb3cab6f745c9989612cf4331278542423\",\"urls\":[\"bzz-raw://adc10aac203d3e4971fd2fc09dfbbf0e4528ced439a557fc7664c8271b12db61\",\"dweb:/ipfs/Qmc4cNYDDFfSpaaKaNRceSFkZqP5oJtkEi9CvRuUkoVAUx\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x60c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "addPriceFeedFor(uint256,uint256,uint256,address)": { + "details": "Existing feeds can't be modified. Neither can feeds that have already been set as defaults (project ID 0).", + "params": { + "feed": "The price feed being added.", + "pricingCurrency": "The currency the feed's resulting price is in terms of.", + "unitCurrency": "The currency being priced by the feed." + } + }, + "constructor": { + "params": { + "owner": "The address that will own the contract.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pricePerUnitOf(uint256,uint256,uint256,uint256)": { + "params": { + "decimals": "The number of decimals the returned fixed point price should include.", + "pricingCurrency": "The currency the feed's resulting price is in terms of.", + "projectId": "The ID of the project to check the feed for. Feeds stored in ID 0 are used by default for all projects.", + "unitCurrency": "The currency being priced by the feed." + }, + "returns": { + "_0": "The `pricingCurrency` price of 1 `unitCurrency`, as a fixed point number with the specified number of decimals." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DEFAULT_PROJECT_ID()": { + "notice": "The ID to store default values in." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "addPriceFeedFor(uint256,uint256,uint256,address)": { + "notice": "Add a price feed for the `unitCurrency`, priced in terms of the `pricingCurrency`." + }, + "priceFeedFor(uint256,uint256,uint256)": { + "notice": "The available price feeds." + }, + "pricePerUnitOf(uint256,uint256,uint256,uint256)": { + "notice": "Gets the `pricingCurrency` cost for one unit of the `unitCurrency`." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBPrices.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBProjects.json b/deployments/nana-core/polygon_mumbai/JBProjects.json new file mode 100644 index 00000000..c63c56cb --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBProjects.json @@ -0,0 +1,1533 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBProjects", + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "CLOCK_MODE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "clock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "count", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createFor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegate", + "inputs": [ + { + "name": "delegatee", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegateBySig", + "inputs": [ + { + "name": "delegatee", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "v", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "r", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegates", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getApproved", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPastTotalSupply", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPastVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isApprovedForAll", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nonces", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ownerOf", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setApprovalForAll", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "approved", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTokenUriResolver", + "inputs": [ + { + "name": "newResolver", + "type": "address", + "internalType": "contract IJBTokenUriResolver" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenURI", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenUriResolver", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTokenUriResolver" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "approved", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ApprovalForAll", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "approved", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Create", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DelegateChanged", + "inputs": [ + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "fromDelegate", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "toDelegate", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DelegateVotesChanged", + "inputs": [ + { + "name": "delegate", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "previousVotes", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newVotes", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetTokenUriResolver", + "inputs": [ + { + "name": "resolver", + "type": "address", + "indexed": true, + "internalType": "contract IJBTokenUriResolver" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CheckpointUnorderedInsertion", + "inputs": [] + }, + { + "type": "error", + "name": "ECDSAInvalidSignature", + "inputs": [] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureS", + "inputs": [ + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ERC5805FutureLookup", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "clock", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "error", + "name": "ERC6372InconsistentClock", + "inputs": [] + }, + { + "type": "error", + "name": "ERC721IncorrectOwner", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InsufficientApproval", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidApprover", + "inputs": [ + { + "name": "approver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidReceiver", + "inputs": [ + { + "name": "receiver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidSender", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721NonexistentToken", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidAccountNonce", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "currentNonce", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidShortString", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "SafeCastOverflowedUintDowncast", + "inputs": [ + { + "name": "bits", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "StringTooLong", + "inputs": [ + { + "name": "str", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "error", + "name": "VotesExpiredSignature", + "inputs": [ + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CheckpointUnorderedInsertion\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ECDSAInvalidSignature\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ECDSAInvalidSignatureLength\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"ECDSAInvalidSignatureS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"clock\",\"type\":\"uint48\"}],\"type\":\"error\",\"name\":\"ERC5805FutureLookup\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC6372InconsistentClock\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721IncorrectOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ERC721InsufficientApproval\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidApprover\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidOperator\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidReceiver\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidSender\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ERC721NonexistentToken\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"InvalidAccountNonce\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidShortString\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"SafeCastOverflowedUintDowncast\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"type\":\"error\",\"name\":\"StringTooLong\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"VotesExpiredSignature\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Approval\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ApprovalForAll\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Create\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"DelegateChanged\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"previousVotes\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"newVotes\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"DelegateVotesChanged\",\"anonymous\":false},{\"inputs\":[],\"type\":\"event\",\"name\":\"EIP712DomainChanged\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"resolver\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetTokenUriResolver\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Transfer\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"CLOCK_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approve\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"clock\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"createFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"delegate\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"delegateBySig\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"safeTransferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"safeTransferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setApprovalForAll\"},{\"inputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"newResolver\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenUriResolver\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenUriResolver\",\"outputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"CLOCK_MODE()\":{\"details\":\"Machine-readable description of the clock as specified in EIP-6372.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"clock()\":{\"details\":\"Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match.\"},\"constructor\":{\"params\":{\"owner\":\"The owner of the contract who can set metadata.\"}},\"createFor(address)\":{\"details\":\"Anyone can create a project on an owner's behalf.\",\"params\":{\"owner\":\"The address that will be the owner of the project.\"},\"returns\":{\"projectId\":\"The token ID of the newly created project.\"}},\"delegate(address)\":{\"details\":\"Delegates votes from the sender to `delegatee`.\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Delegates votes from signer to `delegatee`.\"},\"delegates(address)\":{\"details\":\"Returns the delegate that `account` has chosen.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getPastTotalSupply(uint256)\":{\"details\":\"Returns the total supply of votes available at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes. Votes that have not been delegated are still part of total supply, even though they would not participate in a vote. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\"},\"getPastVotes(address,uint256)\":{\"details\":\"Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\"},\"getVotes(address)\":{\"details\":\"Returns the current amount of votes that `account` has.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"nonces(address)\":{\"details\":\"Returns the next unused nonce for an address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"setTokenUriResolver(address)\":{\"params\":{\"newResolver\":\"The address of the new resolver.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get a URI of.\"},\"returns\":{\"_0\":\"The token URI to use for the provided `projectId`.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"count()\":{\"notice\":\"The number of projects that have been created using this contract.\"},\"createFor(address)\":{\"notice\":\"Create a new project for the specified owner, which mints an NFT (ERC-721) into their wallet.\"},\"setTokenUriResolver(address)\":{\"notice\":\"Sets the address of the resolver used to retrieve the tokenURI of projects.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"tokenURI(uint256)\":{\"notice\":\"Returns the URI where the ERC-721 standard JSON of a project is hosted.\"},\"tokenUriResolver()\":{\"notice\":\"The contract resolving each project ID to its ERC721 URI.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBProjects.sol\":\"JBProjects\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947\",\"urls\":[\"bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856\",\"dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/Votes.sol\":{\"keccak256\":\"0xb8f69828d41b3594afd7a8c6393565901c205d8b5baf5bd2e42dbac637172979\",\"urls\":[\"bzz-raw://c790253821191ac46b2050d87df820d4209871f90c616381e2c2c00ff3eaac34\",\"dweb:/ipfs/QmcPETTyuZBzDRL39JNXj3SBMdx3Y9o4fPQLSZ27py5Jim\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol\":{\"keccak256\":\"0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818\",\"urls\":[\"bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a\",\"dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol\":{\"keccak256\":\"0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33\",\"urls\":[\"bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb\",\"dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784\",\"urls\":[\"bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd\",\"dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49\",\"urls\":[\"bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22\",\"dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol\":{\"keccak256\":\"0x51eec12bef5f18ea0bad353fbdc227c67b9082d1b459f7c87f47711ad152b0b3\",\"urls\":[\"bzz-raw://3f9142b8e720fa76191a966be6fd93a2a4357f5ac86bbb5cb050e53add32bfbe\",\"dweb:/ipfs/QmdFWtPT9PrMpQkExuDLCAELqA8yfYjQpfWKymdHdRTy2T\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol\":{\"keccak256\":\"0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad\",\"urls\":[\"bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b\",\"dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"],\"license\":\"MIT\"},\"src/JBProjects.sol\":{\"keccak256\":\"0xb959e3d60bc4a8a43b9358be16549ca6d10059db3467c43703fa0c6c8e73621a\",\"urls\":[\"bzz-raw://5eb424d178e5946688c7ad6bfc7420c3c8bd7e9d5b2a0fef175462a6a4710012\",\"dweb:/ipfs/QmeXuNoYXrNZVrom4f6Mk5bcKbGk5BtRCzXKf9cpZDoCKW\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x6101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f4a75696365626f782050726f6a65637473000000000000000000000000000011600661162d565b60606108957f3100000000000000000000000000000000000000000000000000000000000001600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71614801561174857507f000000000000000000000000000000000000000000000000000000000001388146145b1561177257507fb3f445460e2829bca248340ad10f798d9c9086adb235a66bc755d6d30280cd9c90565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f2e5c5c1c4affeaeda2d3db263faddbd323c18ac7d44a6ca994665583d3b15dad918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "CLOCK_MODE()": { + "details": "Machine-readable description of the clock as specified in EIP-6372." + }, + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "clock()": { + "details": "Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match." + }, + "constructor": { + "params": { + "owner": "The owner of the contract who can set metadata." + } + }, + "createFor(address)": { + "details": "Anyone can create a project on an owner's behalf.", + "params": { + "owner": "The address that will be the owner of the project." + }, + "returns": { + "projectId": "The token ID of the newly created project." + } + }, + "delegate(address)": { + "details": "Delegates votes from the sender to `delegatee`." + }, + "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": { + "details": "Delegates votes from signer to `delegatee`." + }, + "delegates(address)": { + "details": "Returns the delegate that `account` has chosen." + }, + "eip712Domain()": { + "details": "See {IERC-5267}." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "getPastTotalSupply(uint256)": { + "details": "Returns the total supply of votes available at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes. Votes that have not been delegated are still part of total supply, even though they would not participate in a vote. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined." + }, + "getPastVotes(address,uint256)": { + "details": "Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined." + }, + "getVotes(address)": { + "details": "Returns the current amount of votes that `account` has." + }, + "isApprovedForAll(address,address)": { + "details": "See {IERC721-isApprovedForAll}." + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "nonces(address)": { + "details": "Returns the next unused nonce for an address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "setTokenUriResolver(address)": { + "params": { + "newResolver": "The address of the new resolver." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "tokenURI(uint256)": { + "params": { + "projectId": "The ID of the project to get a URI of." + }, + "returns": { + "_0": "The token URI to use for the provided `projectId`." + } + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "count()": { + "notice": "The number of projects that have been created using this contract." + }, + "createFor(address)": { + "notice": "Create a new project for the specified owner, which mints an NFT (ERC-721) into their wallet." + }, + "setTokenUriResolver(address)": { + "notice": "Sets the address of the resolver used to retrieve the tokenURI of projects." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "tokenURI(uint256)": { + "notice": "Returns the URI where the ERC-721 standard JSON of a project is hosted." + }, + "tokenUriResolver()": { + "notice": "The contract resolving each project ID to its ERC721 URI." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBProjects.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBRulesets.json b/deployments/nana-core/polygon_mumbai/JBRulesets.json new file mode 100644 index 00000000..4e6699d3 --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBRulesets.json @@ -0,0 +1,1172 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBRulesets", + "address": "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentApprovalStatusForLatestRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestQueuedRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approvalStatus", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestRulesetIdOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "queueFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startingId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "size", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "rulesets", + "type": "tuple[]", + "internalType": "struct JBRuleset[]", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "upcomingRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateRulesetWeightCache", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "RulesetInitialized", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RulesetQueued", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "indexed": false, + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "BLOCK_ALREADY_CONTAINS_RULESET", + "inputs": [] + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_DECAY_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_APPROVAL_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_DURATION", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_END_TIME", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_WEIGHT", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BLOCK_ALREADY_CONTAINS_RULESET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_DECAY_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_APPROVAL_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_DURATION\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_END_TIME\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_WEIGHT\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RulesetInitialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"RulesetQueued\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentApprovalStatusForLatestRulesetOf\",\"outputs\":[{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestQueuedRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"approvalStatus\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestRulesetIdOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"queueFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startingId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rulesetsOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset[]\",\"name\":\"rulesets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upcomingRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateRulesetWeightCache\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"currentApprovalStatusForLatestRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to check the approval status of.\"},\"returns\":{\"_0\":\"The project's current approval status.\"}},\"currentOf(uint256)\":{\"details\":\"If a current ruleset of the project is not found, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project to get the current ruleset of.\"},\"returns\":{\"ruleset\":\"The project's current ruleset.\"}},\"getRulesetOf(uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to which the ruleset belongs.\",\"rulesetId\":\"The ID of the ruleset to get the struct of.\"},\"returns\":{\"ruleset\":\"The ruleset struct.\"}},\"latestQueuedRulesetOf(uint256)\":{\"details\":\"Returns struct and status for the ruleset initialized furthest in the future (at the end of the rulset queue).\",\"params\":{\"projectId\":\"The ID of the project to get the latest queued ruleset of.\"},\"returns\":{\"approvalStatus\":\"The approval hook's status for the ruleset.\",\"ruleset\":\"The project's latest queued ruleset's struct.\"}},\"queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)\":{\"details\":\"Only a project's current controller can queue its rulesets.\",\"params\":{\"approvalHook\":\"An address of a contract that says whether a proposed ruleset should be accepted or rejected. It can be used to create rules around how a project owner can change ruleset parameters over time.\",\"decayRate\":\"A percent by how much the `weight` of the subsequent ruleset should be reduced, if the project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of `JBConstants.MAX_DECAY_RATE`.\",\"duration\":\"The number of seconds the ruleset lasts for, after which a new ruleset will start. A duration of 0 means that the ruleset will stay active until the project owner explicitly issues a reconfiguration, at which point a new ruleset will immediately start with the updated properties. If the duration is greater than 0, a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will apply to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same properties but new `start` timestamp and a decayed `weight`.\",\"metadata\":\"Arbitrary extra data to associate with this ruleset. This metadata is not used by `JBRulesets`.\",\"mustStartAtOrAfter\":\"The earliest time the ruleset can start. The ruleset cannot start before this timestamp.\",\"projectId\":\"The ID of the project the ruleset is being queued for.\",\"weight\":\"A fixed point number with 18 decimals that contracts can use to base arbitrary calculations on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is received.\"},\"returns\":{\"_0\":\"The struct of the new ruleset.\"}},\"rulesetsOf(uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the rulesets of.\",\"size\":\"The maximum number of rulesets to return.\",\"startingId\":\"The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used.\"},\"returns\":{\"rulesets\":\"The rulesets as an array of `JBRuleset` structs.\"}},\"upcomingRulesetOf(uint256)\":{\"details\":\"If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project to get the upcoming ruleset of.\"},\"returns\":{\"ruleset\":\"The struct for the project's upcoming ruleset.\"}},\"updateRulesetWeightCache(uint256)\":{\"params\":{\"projectId\":\"The ID of the project having its ruleset weight cached.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"currentApprovalStatusForLatestRulesetOf(uint256)\":{\"notice\":\"The current approval status of a given project's latest ruleset.\"},\"currentOf(uint256)\":{\"notice\":\"The ruleset that is currently active for the specified project.\"},\"getRulesetOf(uint256,uint256)\":{\"notice\":\"Get the ruleset struct for a given `rulesetId` and `projectId`.\"},\"latestQueuedRulesetOf(uint256)\":{\"notice\":\"The latest ruleset queued for a project. Returns the ruleset's struct and its current approval status.\"},\"latestRulesetIdOf(uint256)\":{\"notice\":\"The ID of the ruleset with the latest start time for a specific project, whether the ruleset has been approved or not.\"},\"queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)\":{\"notice\":\"Queues the upcoming approvable ruleset for the specified project.\"},\"rulesetsOf(uint256,uint256,uint256)\":{\"notice\":\"Get an array of a project's rulesets up to a maximum array size, sorted from latest to earliest.\"},\"upcomingRulesetOf(uint256)\":{\"notice\":\"The ruleset that's up next for a project.\"},\"updateRulesetWeightCache(uint256)\":{\"notice\":\"Cache the value of the ruleset weight.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBRulesets.sol\":\"JBRulesets\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBRulesets.sol\":{\"keccak256\":\"0xd92f2897151637ec46f1a70d39ce45670ce3aafb03f3539240a943994fd0444b\",\"urls\":[\"bzz-raw://50415496ef3025d2d7c466d9b7888f0797f42877b401567b5dd3fe9e7ba95f62\",\"dweb:/ipfs/QmXqzzjpDRgJHEmkWm2h7HMVaLEEQ7pnvHNh86gkSsDQiv\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWeightCache.sol\":{\"keccak256\":\"0x20da9376d0b4b24f7bfb049ac13991ac4a9f5676c3bae5c6fb049a78239d1529\",\"urls\":[\"bzz-raw://11f9b1b4373ce700b82e4159bd6688115aae349996f73d3571abf99fa8cdb1aa\",\"dweb:/ipfs/QmV8DxuoUskd6frKLhT61Sq4VTCygrcS6jbXHJU9KmHX1h\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "currentApprovalStatusForLatestRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project to check the approval status of." + }, + "returns": { + "_0": "The project's current approval status." + } + }, + "currentOf(uint256)": { + "details": "If a current ruleset of the project is not found, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project to get the current ruleset of." + }, + "returns": { + "ruleset": "The project's current ruleset." + } + }, + "getRulesetOf(uint256,uint256)": { + "params": { + "projectId": "The ID of the project to which the ruleset belongs.", + "rulesetId": "The ID of the ruleset to get the struct of." + }, + "returns": { + "ruleset": "The ruleset struct." + } + }, + "latestQueuedRulesetOf(uint256)": { + "details": "Returns struct and status for the ruleset initialized furthest in the future (at the end of the rulset queue).", + "params": { + "projectId": "The ID of the project to get the latest queued ruleset of." + }, + "returns": { + "approvalStatus": "The approval hook's status for the ruleset.", + "ruleset": "The project's latest queued ruleset's struct." + } + }, + "queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)": { + "details": "Only a project's current controller can queue its rulesets.", + "params": { + "approvalHook": "An address of a contract that says whether a proposed ruleset should be accepted or rejected. It can be used to create rules around how a project owner can change ruleset parameters over time.", + "decayRate": "A percent by how much the `weight` of the subsequent ruleset should be reduced, if the project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of `JBConstants.MAX_DECAY_RATE`.", + "duration": "The number of seconds the ruleset lasts for, after which a new ruleset will start. A duration of 0 means that the ruleset will stay active until the project owner explicitly issues a reconfiguration, at which point a new ruleset will immediately start with the updated properties. If the duration is greater than 0, a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will apply to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same properties but new `start` timestamp and a decayed `weight`.", + "metadata": "Arbitrary extra data to associate with this ruleset. This metadata is not used by `JBRulesets`.", + "mustStartAtOrAfter": "The earliest time the ruleset can start. The ruleset cannot start before this timestamp.", + "projectId": "The ID of the project the ruleset is being queued for.", + "weight": "A fixed point number with 18 decimals that contracts can use to base arbitrary calculations on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is received." + }, + "returns": { + "_0": "The struct of the new ruleset." + } + }, + "rulesetsOf(uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the rulesets of.", + "size": "The maximum number of rulesets to return.", + "startingId": "The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used." + }, + "returns": { + "rulesets": "The rulesets as an array of `JBRuleset` structs." + } + }, + "upcomingRulesetOf(uint256)": { + "details": "If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project to get the upcoming ruleset of." + }, + "returns": { + "ruleset": "The struct for the project's upcoming ruleset." + } + }, + "updateRulesetWeightCache(uint256)": { + "params": { + "projectId": "The ID of the project having its ruleset weight cached." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "currentApprovalStatusForLatestRulesetOf(uint256)": { + "notice": "The current approval status of a given project's latest ruleset." + }, + "currentOf(uint256)": { + "notice": "The ruleset that is currently active for the specified project." + }, + "getRulesetOf(uint256,uint256)": { + "notice": "Get the ruleset struct for a given `rulesetId` and `projectId`." + }, + "latestQueuedRulesetOf(uint256)": { + "notice": "The latest ruleset queued for a project. Returns the ruleset's struct and its current approval status." + }, + "latestRulesetIdOf(uint256)": { + "notice": "The ID of the ruleset with the latest start time for a specific project, whether the ruleset has been approved or not." + }, + "queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)": { + "notice": "Queues the upcoming approvable ruleset for the specified project." + }, + "rulesetsOf(uint256,uint256,uint256)": { + "notice": "Get an array of a project's rulesets up to a maximum array size, sorted from latest to earliest." + }, + "upcomingRulesetOf(uint256)": { + "notice": "The ruleset that's up next for a project." + }, + "updateRulesetWeightCache(uint256)": { + "notice": "Cache the value of the ruleset weight." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBRulesets.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBSplits.json b/deployments/nana-core/polygon_mumbai/JBSplits.json new file mode 100644 index 00000000..a44dae5a --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBSplits.json @@ -0,0 +1,699 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBSplits", + "address": "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FALLBACK_RULESET_ID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setSplitGroupsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "splitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "SetSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_LOCKED_UNTIL", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PROJECT_ID", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SPLIT_PERCENT", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_TOTAL_PERCENT", + "inputs": [] + }, + { + "type": "error", + "name": "PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_LOCKED_UNTIL\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PROJECT_ID\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SPLIT_PERCENT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_TOTAL_PERCENT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetSplit\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FALLBACK_RULESET_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setSplitGroupsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"splitsOf\",\"outputs\":[{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"details\":\"Only a project's controller can set its splits.The new split groups must include any currently set splits that are locked.\",\"params\":{\"projectId\":\"The ID of the project to set the split groups of.\",\"rulesetId\":\"The ID of the ruleset the split groups should be active in. Send 0 to set the default split that'll be active if no ruleset has specific splits set. The default's default is the project's owner.\",\"splitGroups\":\"An array of split groups to set.\"}},\"splitsOf(uint256,uint256,uint256)\":{\"details\":\"If splits aren't found at the given `rulesetId`, they'll be sought in the FALLBACK_RULESET_ID of 0.\",\"params\":{\"groupId\":\"The identifying group of the splits.\",\"projectId\":\"The ID of the project to get splits for.\",\"rulesetId\":\"An identifier within which the returned splits should be considered active.\"},\"returns\":{\"splits\":\"An array of all splits for the project.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"FALLBACK_RULESET_ID()\":{\"notice\":\"the ID of the ruleset that will be checked if nothing was found in the provided rulesetId.\"},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"notice\":\"Sets a project's split groups.\"},\"splitsOf(uint256,uint256,uint256)\":{\"notice\":\"Get the split structs for the specified project ID, within the specified ruleset, for the specified group. The splits stored at ruleset 0 are used by default during a ruleset if the splits for the specific ruleset aren't set.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBSplits.sol\":\"JBSplits\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBSplits.sol\":{\"keccak256\":\"0xb617e399f74582f9e4684059d732e72ae4ee887cf7f533e3c3e43cfa1695333b\",\"urls\":[\"bzz-raw://26d025f906cb7586cbac8e666b518553d7cb35d4bddf9bfdb8f4b3f7399ab4fd\",\"dweb:/ipfs/QmekRKnrfALw964FDaMhEWBQmDCKRDqqnKZtD7vDZKDdNV\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "details": "Only a project's controller can set its splits.The new split groups must include any currently set splits that are locked.", + "params": { + "projectId": "The ID of the project to set the split groups of.", + "rulesetId": "The ID of the ruleset the split groups should be active in. Send 0 to set the default split that'll be active if no ruleset has specific splits set. The default's default is the project's owner.", + "splitGroups": "An array of split groups to set." + } + }, + "splitsOf(uint256,uint256,uint256)": { + "details": "If splits aren't found at the given `rulesetId`, they'll be sought in the FALLBACK_RULESET_ID of 0.", + "params": { + "groupId": "The identifying group of the splits.", + "projectId": "The ID of the project to get splits for.", + "rulesetId": "An identifier within which the returned splits should be considered active." + }, + "returns": { + "splits": "An array of all splits for the project." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "FALLBACK_RULESET_ID()": { + "notice": "the ID of the ruleset that will be checked if nothing was found in the provided rulesetId." + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "notice": "Sets a project's split groups." + }, + "splitsOf(uint256,uint256,uint256)": { + "notice": "Get the split structs for the specified project ID, within the specified ruleset, for the specified group. The splits stored at ruleset 0 are used by default during a ruleset if the splits for the specific ruleset aren't set." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBSplits.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBTerminalStore.json b/deployments/nana-core/polygon_mumbai/JBTerminalStore.json new file mode 100644 index 00000000..97175138 --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBTerminalStore.json @@ -0,0 +1,1481 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBTerminalStore", + "address": "0xa0D811360b0d49be8d33309D6eAE03D072E30312", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "rulesets", + "type": "address", + "internalType": "contract IJBRulesets" + }, + { + "name": "prices", + "type": "address", + "internalType": "contract IJBPrices" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PRICES", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPrices" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "RULESETS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBRulesets" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentReclaimableSurplusOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "useTotalSurplus", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentReclaimableSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "surplus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentSurplusOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentTotalSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "recordAddedBalanceFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordPaymentFrom", + "inputs": [ + { + "name": "payer", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hookSpecifications", + "type": "tuple[]", + "internalType": "struct JBPayHookSpecification[]", + "components": [ + { + "name": "hook", + "type": "address", + "internalType": "contract IJBPayHook" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordPayoutFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordRedemptionFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "balanceAccountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "reclaimAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hookSpecifications", + "type": "tuple[]", + "internalType": "struct JBRedeemHookSpecification[]", + "components": [ + { + "name": "hook", + "type": "address", + "internalType": "contract IJBRedeemHook" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordTerminalMigration", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordUsedAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "usedAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "usedPayoutLimitOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "usedSurplusAllowanceOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "error", + "name": "INADEQUATE_CONTROLLER_ALLOWANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_TERMINAL_STORE_BALANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_TOKENS", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_AMOUNT_TO_SEND_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET", + "inputs": [] + }, + { + "type": "error", + "name": "PAYOUT_LIMIT_EXCEEDED", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "RULESET_PAYMENT_PAUSED", + "inputs": [] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "TERMINAL_MIGRATION_NOT_ALLOWED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "contractAddress": null, + "cumulativeGasUsed": "9991364", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "9790647", + "hash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "index": 4, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 10, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x3fc7767f098b04907638e00fd7a27902f450f983c63e80014e8720d7ede69959" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 14, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 17, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 20, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 27, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 28, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 29, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 30, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000413803f48aff40000000000000000000000000000000000000000000000000035fd496c3f931d390000000000000000000000000000000000000000000000be84d13e42b3f049e600000000000000000000000000000000000000000000000031e9c92cf6e329390000000000000000000000000000000000000000000000be88e4be81fca03de6", + "index": 31, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000004ce0f825810371ea57fbcba98b2be98e730c10df" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000002008000000800000004000000060008000000000000000000040000080008000000100000000000000040000000000000000208400000008820000800001000020040000000300000000000000020000020000000000000000000800000004100021000080000008000000400001000000000000000100800000000200000000000000000000804000000020204000081010000000000000000000020208400040000080000000000006004000000000000000200081000008000000000000000000040000100002001060000000010000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBRulesets\",\"name\":\"rulesets\",\"type\":\"address\"},{\"internalType\":\"contract IJBPrices\",\"name\":\"prices\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_CONTROLLER_ALLOWANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_TERMINAL_STORE_BALANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_TOKENS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_AMOUNT_TO_SEND_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PAYOUT_LIMIT_EXCEEDED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RULESET_PAYMENT_PAUSED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TERMINAL_MIGRATION_NOT_ALLOWED\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PRICES\",\"outputs\":[{\"internalType\":\"contract IJBPrices\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"RULESETS\",\"outputs\":[{\"internalType\":\"contract IJBRulesets\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"accountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplus\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentReclaimableSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"surplus\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentReclaimableSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"accountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentTotalSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordAddedBalanceFor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"amount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordPaymentFrom\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBPayHookSpecification[]\",\"name\":\"hookSpecifications\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBPayHook\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordPayoutFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"balanceAccountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordRedemptionFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"reclaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRedeemHookSpecification[]\",\"name\":\"hookSpecifications\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBRedeemHook\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordTerminalMigration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordUsedAllowanceOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"usedAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"usedPayoutLimitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"usedSurplusAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"prices\":\"A contract that exposes price feeds.\",\"rulesets\":\"A contract storing and managing project rulesets.\"}},\"currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)\":{\"details\":\"The returned amount in terms of the specified terminal's currency.The returned amount is represented as a fixed point number with the same amount of decimals as the specified terminal.\",\"params\":{\"accountingContexts\":\"The accounting contexts of tokens whose balances should contribute to the surplus being reclaimed from.\",\"currency\":\"The currency that the resulting number will be in terms of.\",\"decimals\":\"The number of decimals to include in the resulting fixed point number.\",\"projectId\":\"The ID of the project to get the redeemable surplus amount for.\",\"terminal\":\"The terminal the redeemable amount would come from.\",\"tokenCount\":\"The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\",\"useTotalSurplus\":\"A flag indicating whether the surplus used in the calculation should be summed from all of the project's terminals. If false, surplus should be limited to the amount in the specified `terminal`.\"},\"returns\":{\"_0\":\"The amount of surplus tokens that can be reclaimed by redeeming `tokenCount` tokens as a fixed point number with the specified number of decimals.\"}},\"currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the reclaimable surplus amount for.\",\"surplus\":\"The surplus amount to make the calculation with, as a fixed point number.\",\"tokenCount\":\"The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\",\"totalSupply\":\"The total number of tokens to make the calculation with, as a fixed point number with 18 decimals.\"},\"returns\":{\"_0\":\"The surplus token amount that can be reclaimed, as a fixed point number with the same number of decimals as the provided `surplus`.\"}},\"currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)\":{\"details\":\"The surplus is the amount of funds a project has in a terminal in excess of its payout limit.The surplus is represented as a fixed point number with the same amount of decimals as the specified terminal.\",\"params\":{\"accountingContexts\":\"The accounting contexts of tokens whose balances should contribute to the surplus being calculated.\",\"currency\":\"The currency the resulting amount should be in terms of.\",\"decimals\":\"The number of decimals to expect in the resulting fixed point number.\",\"projectId\":\"The ID of the project to get surplus for.\",\"terminal\":\"The terminal the surplus is being calculated for.\"},\"returns\":{\"_0\":\"The current surplus amount the project has in the specified terminal.\"}},\"currentTotalSurplusOf(uint256,uint256,uint256)\":{\"params\":{\"currency\":\"The currency that the total surplus should be in terms of.\",\"decimals\":\"The number of decimals that the fixed point surplus should include.\",\"projectId\":\"The ID of the project to get the total surplus for.\"},\"returns\":{\"_0\":\"The current total surplus amount that the project has across all terminals.\"}},\"recordAddedBalanceFor(uint256,address,uint256)\":{\"params\":{\"amount\":\"The amount of terminal tokens added, as a fixed point number with the same amount of decimals as its relative terminal.\",\"projectId\":\"The ID of the project which funds are being added to the balance of.\",\"token\":\"The token being added to the balance.\"}},\"recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)\":{\"details\":\"Mints the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, mints tokens in proportion with the amount paid.\",\"params\":{\"amount\":\"The amount of tokens being paid. Includes the token being paid, their value, the number of decimals included, and the currency of the amount.\",\"beneficiary\":\"The address that should be the beneficiary of anything the payment yields (including project tokens minted by the payment).\",\"metadata\":\"Bytes to send to the data hook, if the project's current ruleset specifies one.\",\"payer\":\"The address that made the payment to the terminal.\",\"projectId\":\"The ID of the project being paid.\"},\"returns\":{\"hookSpecifications\":\"A list of pay hooks, including data and amounts to send to them. The terminal should fulfill these specifications.\",\"ruleset\":\"The ruleset the payment was made during, as a `JBRuleset` struct.\",\"tokenCount\":\"The number of project tokens that were minted, as a fixed point number with 18 decimals.\"}},\"recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)\":{\"params\":{\"accountingContext\":\"The context of the token being paid out.\",\"amount\":\"The amount to pay out (use from the payout limit), as a fixed point number.\",\"currency\":\"The currency of the `amount`. This must match the project's current ruleset's currency.\",\"projectId\":\"The ID of the project that is paying out funds.\"},\"returns\":{\"amountPaidOut\":\"The amount of terminal tokens paid out, as a fixed point number with the same amount of decimals as its relative terminal.\",\"ruleset\":\"The ruleset the payout was made during, as a `JBRuleset` struct.\"}},\"recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)\":{\"details\":\"Redeems the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, redeems tokens along a redemption bonding curve that is a function of the number of tokens being burned.\",\"params\":{\"accountingContext\":\"The accounting context of the token being reclaimed by the redemption.\",\"balanceAccountingContexts\":\"The accounting contexts of the tokens whose balances should contribute to the surplus being reclaimed from.\",\"holder\":\"The account that is redeeming tokens.\",\"metadata\":\"Bytes to send to the data hook, if the project's current ruleset specifies one.\",\"projectId\":\"The ID of the project being redeemed from.\",\"redeemCount\":\"The number of project tokens to redeem, as a fixed point number with 18 decimals.\"},\"returns\":{\"hookSpecifications\":\"A list of redeem hooks, including data and amounts to send to them. The terminal should fulfill these specifications.\",\"reclaimAmount\":\"The amount of tokens reclaimed from the terminal, as a fixed point number with 18 decimals.\",\"redemptionRate\":\"The redemption rate influencing the reclaim amount.\",\"ruleset\":\"The ruleset during the redemption was made during, as a `JBRuleset` struct. This ruleset will have a redemption rate provided by the redemption hook if applicable.\"}},\"recordTerminalMigration(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project being migrated.\",\"token\":\"The token being migrated.\"},\"returns\":{\"balance\":\"The project's current balance (which is being migrated), as a fixed point number with the same amount of decimals as its relative terminal.\"}},\"recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)\":{\"details\":\"When surplus allowance is \\\"used\\\", it is taken out of the project's surplus within a terminal.\",\"params\":{\"accountingContext\":\"The accounting context of the token whose balances should contribute to the surplus allowance being reclaimed from.\",\"amount\":\"The amount to use from the surplus allowance, as a fixed point number.\",\"currency\":\"The currency of the `amount`. Must match the currency of the surplus allowance.\",\"projectId\":\"The ID of the project to use the surplus allowance of.\"},\"returns\":{\"ruleset\":\"The ruleset during the surplus allowance is being used during, as a `JBRuleset` struct.\",\"usedAmount\":\"The amount of terminal tokens used, as a fixed point number with the same amount of decimals as its relative terminal.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"PRICES()\":{\"notice\":\"The contract that exposes price feeds.\"},\"RULESETS()\":{\"notice\":\"The contract storing and managing project rulesets.\"},\"balanceOf(address,uint256,address)\":{\"notice\":\"A project's balance of a specific token within a terminal.\"},\"currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)\":{\"notice\":\"The surplus amount that can currently be reclaimed from a terminal by redeeming the specified number of tokens, based on the total token supply and current surplus.\"},\"currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)\":{\"notice\":\"The current amount of surplus tokens from a terminal that can be reclaimed by redeeming the specified number of tokens, based on the specified total token supply and surplus amounts.\"},\"currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)\":{\"notice\":\"Gets the current surplus amount in a terminal for a specified project.\"},\"currentTotalSurplusOf(uint256,uint256,uint256)\":{\"notice\":\"Gets the current surplus amount for a specified project across all terminals.\"},\"recordAddedBalanceFor(uint256,address,uint256)\":{\"notice\":\"Records funds being added to a project's balance.\"},\"recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)\":{\"notice\":\"Records a payment to a project.\"},\"recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)\":{\"notice\":\"Records a payout from a project.\"},\"recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)\":{\"notice\":\"Records a redemption from a project.\"},\"recordTerminalMigration(uint256,address)\":{\"notice\":\"Records the migration of funds from this store.\"},\"recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)\":{\"notice\":\"Records a use of a project's surplus allowance.\"},\"usedPayoutLimitOf(address,uint256,address,uint256,uint256)\":{\"notice\":\"The currency-denominated amount of funds that a project has already paid out from its payout limit during the current ruleset for each terminal, in terms of the payout limit's currency.\"},\"usedSurplusAllowanceOf(address,uint256,address,uint256,uint256)\":{\"notice\":\"The currency-denominated amounts of funds that a project has used from its surplus allowance during the current ruleset for each terminal, in terms of the surplus allowance's currency.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBTerminalStore.sol\":\"JBTerminalStore\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBTerminalStore.sol\":{\"keccak256\":\"0x061651822f7b0a94fca7c65bdeec41b25af7f87776a7a9b094186bd65f0ee49b\",\"urls\":[\"bzz-raw://843ec729dd7ce80f23189ace13a3f17706696e88409b49eb3cabef2b14cb7fab\",\"dweb:/ipfs/QmRGp9udBSEjCuH3iG2U1fRE3GBgiT91axvmRmr5VpGVWs\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetDataHook.sol\":{\"keccak256\":\"0x3fea9fcab6f0335e67f0f052cf5d3446e9310808f88b5878d21586be00f89f85\",\"urls\":[\"bzz-raw://5506848f471d308a14523f91202d76d960f8255e227d29d34b0892ef70315cae\",\"dweb:/ipfs/QmakRKFctSZobpem1caU2zXqhiPQnaYVa7Y6NdAPAonHaU\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTerminalStore.sol\":{\"keccak256\":\"0x81d5eb6c877f535143d26d2bef7be97dabf95122db4b1c6fdd0adc32ddc704ca\",\"urls\":[\"bzz-raw://551ab223b3498a20ae7e2bb3da7169ffa2c0a9ab3bd22c7387b19d69915809a4\",\"dweb:/ipfs/Qma2n7QtVAHmB7pWQavQnSBCouAfh171KezhYbNNmdT3wH\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBFixedPointNumber.sol\":{\"keccak256\":\"0x687bdcb1353e2d29f1bd38bbadeb4ab0f2cbb351688f77e56365a25044577b53\",\"urls\":[\"bzz-raw://ad7f8756cf5f209cff9fbe8a65e799e29c159da55a3a2d532298acfb9d567311\",\"dweb:/ipfs/QmZMCox7uDwZrnbiZnZheizrG6PAisuHVuJgXK9rHn7PKU\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBBeforePayRecordedContext.sol\":{\"keccak256\":\"0x5b04e814da83c7e83ff892ab07eaad6abce6f7b85a75f8da9380e9fc3470bc81\",\"urls\":[\"bzz-raw://11c889aab993fce3e3cc2dedc15fc30dd367e7fef9b7b1bfd6a6a9f248781731\",\"dweb:/ipfs/QmVVtydCD1azeWhGLxA1hthxfLyKzMHZ1eVzCz3a3R5dLy\"],\"license\":\"MIT\"},\"src/structs/JBBeforeRedeemRecordedContext.sol\":{\"keccak256\":\"0x73eadaf6827e82f6ccbe3a1e2b2b7fc6c59cef471f73335041b30ddcc000989d\",\"urls\":[\"bzz-raw://2f3ee84662eed565dbdaed406ef836fffaf55cccd417575578152e5085d0b1f2\",\"dweb:/ipfs/QmaJGFS7hxJsiUdKvbv5BKhSwceDEzKBnt7t5YeNWvYgMK\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "0x0631183bd45c31F8645F9dCF8705951F730362E9" + ], + "bytecode": "0x60e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e981565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb81565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e91690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "prices": "A contract that exposes price feeds.", + "rulesets": "A contract storing and managing project rulesets." + } + }, + "currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)": { + "details": "The returned amount in terms of the specified terminal's currency.The returned amount is represented as a fixed point number with the same amount of decimals as the specified terminal.", + "params": { + "accountingContexts": "The accounting contexts of tokens whose balances should contribute to the surplus being reclaimed from.", + "currency": "The currency that the resulting number will be in terms of.", + "decimals": "The number of decimals to include in the resulting fixed point number.", + "projectId": "The ID of the project to get the redeemable surplus amount for.", + "terminal": "The terminal the redeemable amount would come from.", + "tokenCount": "The number of tokens to make the calculation with, as a fixed point number with 18 decimals.", + "useTotalSurplus": "A flag indicating whether the surplus used in the calculation should be summed from all of the project's terminals. If false, surplus should be limited to the amount in the specified `terminal`." + }, + "returns": { + "_0": "The amount of surplus tokens that can be reclaimed by redeeming `tokenCount` tokens as a fixed point number with the specified number of decimals." + } + }, + "currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the reclaimable surplus amount for.", + "surplus": "The surplus amount to make the calculation with, as a fixed point number.", + "tokenCount": "The number of tokens to make the calculation with, as a fixed point number with 18 decimals.", + "totalSupply": "The total number of tokens to make the calculation with, as a fixed point number with 18 decimals." + }, + "returns": { + "_0": "The surplus token amount that can be reclaimed, as a fixed point number with the same number of decimals as the provided `surplus`." + } + }, + "currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)": { + "details": "The surplus is the amount of funds a project has in a terminal in excess of its payout limit.The surplus is represented as a fixed point number with the same amount of decimals as the specified terminal.", + "params": { + "accountingContexts": "The accounting contexts of tokens whose balances should contribute to the surplus being calculated.", + "currency": "The currency the resulting amount should be in terms of.", + "decimals": "The number of decimals to expect in the resulting fixed point number.", + "projectId": "The ID of the project to get surplus for.", + "terminal": "The terminal the surplus is being calculated for." + }, + "returns": { + "_0": "The current surplus amount the project has in the specified terminal." + } + }, + "currentTotalSurplusOf(uint256,uint256,uint256)": { + "params": { + "currency": "The currency that the total surplus should be in terms of.", + "decimals": "The number of decimals that the fixed point surplus should include.", + "projectId": "The ID of the project to get the total surplus for." + }, + "returns": { + "_0": "The current total surplus amount that the project has across all terminals." + } + }, + "recordAddedBalanceFor(uint256,address,uint256)": { + "params": { + "amount": "The amount of terminal tokens added, as a fixed point number with the same amount of decimals as its relative terminal.", + "projectId": "The ID of the project which funds are being added to the balance of.", + "token": "The token being added to the balance." + } + }, + "recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)": { + "details": "Mints the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, mints tokens in proportion with the amount paid.", + "params": { + "amount": "The amount of tokens being paid. Includes the token being paid, their value, the number of decimals included, and the currency of the amount.", + "beneficiary": "The address that should be the beneficiary of anything the payment yields (including project tokens minted by the payment).", + "metadata": "Bytes to send to the data hook, if the project's current ruleset specifies one.", + "payer": "The address that made the payment to the terminal.", + "projectId": "The ID of the project being paid." + }, + "returns": { + "hookSpecifications": "A list of pay hooks, including data and amounts to send to them. The terminal should fulfill these specifications.", + "ruleset": "The ruleset the payment was made during, as a `JBRuleset` struct.", + "tokenCount": "The number of project tokens that were minted, as a fixed point number with 18 decimals." + } + }, + "recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)": { + "params": { + "accountingContext": "The context of the token being paid out.", + "amount": "The amount to pay out (use from the payout limit), as a fixed point number.", + "currency": "The currency of the `amount`. This must match the project's current ruleset's currency.", + "projectId": "The ID of the project that is paying out funds." + }, + "returns": { + "amountPaidOut": "The amount of terminal tokens paid out, as a fixed point number with the same amount of decimals as its relative terminal.", + "ruleset": "The ruleset the payout was made during, as a `JBRuleset` struct." + } + }, + "recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)": { + "details": "Redeems the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, redeems tokens along a redemption bonding curve that is a function of the number of tokens being burned.", + "params": { + "accountingContext": "The accounting context of the token being reclaimed by the redemption.", + "balanceAccountingContexts": "The accounting contexts of the tokens whose balances should contribute to the surplus being reclaimed from.", + "holder": "The account that is redeeming tokens.", + "metadata": "Bytes to send to the data hook, if the project's current ruleset specifies one.", + "projectId": "The ID of the project being redeemed from.", + "redeemCount": "The number of project tokens to redeem, as a fixed point number with 18 decimals." + }, + "returns": { + "hookSpecifications": "A list of redeem hooks, including data and amounts to send to them. The terminal should fulfill these specifications.", + "reclaimAmount": "The amount of tokens reclaimed from the terminal, as a fixed point number with 18 decimals.", + "redemptionRate": "The redemption rate influencing the reclaim amount.", + "ruleset": "The ruleset during the redemption was made during, as a `JBRuleset` struct. This ruleset will have a redemption rate provided by the redemption hook if applicable." + } + }, + "recordTerminalMigration(uint256,address)": { + "params": { + "projectId": "The ID of the project being migrated.", + "token": "The token being migrated." + }, + "returns": { + "balance": "The project's current balance (which is being migrated), as a fixed point number with the same amount of decimals as its relative terminal." + } + }, + "recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)": { + "details": "When surplus allowance is \"used\", it is taken out of the project's surplus within a terminal.", + "params": { + "accountingContext": "The accounting context of the token whose balances should contribute to the surplus allowance being reclaimed from.", + "amount": "The amount to use from the surplus allowance, as a fixed point number.", + "currency": "The currency of the `amount`. Must match the currency of the surplus allowance.", + "projectId": "The ID of the project to use the surplus allowance of." + }, + "returns": { + "ruleset": "The ruleset during the surplus allowance is being used during, as a `JBRuleset` struct.", + "usedAmount": "The amount of terminal tokens used, as a fixed point number with the same amount of decimals as its relative terminal." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "PRICES()": { + "notice": "The contract that exposes price feeds." + }, + "RULESETS()": { + "notice": "The contract storing and managing project rulesets." + }, + "balanceOf(address,uint256,address)": { + "notice": "A project's balance of a specific token within a terminal." + }, + "currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)": { + "notice": "The surplus amount that can currently be reclaimed from a terminal by redeeming the specified number of tokens, based on the total token supply and current surplus." + }, + "currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)": { + "notice": "The current amount of surplus tokens from a terminal that can be reclaimed by redeeming the specified number of tokens, based on the specified total token supply and surplus amounts." + }, + "currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)": { + "notice": "Gets the current surplus amount in a terminal for a specified project." + }, + "currentTotalSurplusOf(uint256,uint256,uint256)": { + "notice": "Gets the current surplus amount for a specified project across all terminals." + }, + "recordAddedBalanceFor(uint256,address,uint256)": { + "notice": "Records funds being added to a project's balance." + }, + "recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)": { + "notice": "Records a payment to a project." + }, + "recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)": { + "notice": "Records a payout from a project." + }, + "recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)": { + "notice": "Records a redemption from a project." + }, + "recordTerminalMigration(uint256,address)": { + "notice": "Records the migration of funds from this store." + }, + "recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)": { + "notice": "Records a use of a project's surplus allowance." + }, + "usedPayoutLimitOf(address,uint256,address,uint256,uint256)": { + "notice": "The currency-denominated amount of funds that a project has already paid out from its payout limit during the current ruleset for each terminal, in terms of the payout limit's currency." + }, + "usedSurplusAllowanceOf(address,uint256,address,uint256,uint256)": { + "notice": "The currency-denominated amounts of funds that a project has used from its surplus allowance during the current ruleset for each terminal, in terms of the surplus allowance's currency." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBTerminalStore.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/JBTokens.json b/deployments/nana-core/polygon_mumbai/JBTokens.json new file mode 100644 index 00000000..28be00a0 --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/JBTokens.json @@ -0,0 +1,1102 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBTokens", + "address": "0x3295C9c7374E583cb2e6Ed455EAf9908022159D0", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "burnFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimTokensFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "creditBalanceOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployERC20For", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mintFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "projectIdOf", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setTokenFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tokenOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBalanceOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalCreditSupplyOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupplyOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferCreditsFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Burn", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "initialCreditBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "initialTokenBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ClaimTokens", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "initialCreditBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DeployERC20", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "contract IJBToken" + }, + { + "name": "name", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Mint", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "tokensWereClaimed", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetToken", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "newToken", + "type": "address", + "indexed": true, + "internalType": "contract IJBToken" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TransferCredits", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_NAME", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_SYMBOL", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_TOKEN", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_CREDITS", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_FUNDS", + "inputs": [] + }, + { + "type": "error", + "name": "OVERFLOW_ALERT", + "inputs": [] + }, + { + "type": "error", + "name": "PROJECT_ALREADY_HAS_TOKEN", + "inputs": [] + }, + { + "type": "error", + "name": "RECIPIENT_ZERO_ADDRESS", + "inputs": [] + }, + { + "type": "error", + "name": "TOKENS_MUST_HAVE_18_DECIMALS", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_ALREADY_SET", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_FOUND", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_NAME\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_SYMBOL\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_TOKEN\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_CREDITS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_FUNDS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OVERFLOW_ALERT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PROJECT_ALREADY_HAS_TOKEN\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RECIPIENT_ZERO_ADDRESS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKENS_MUST_HAVE_18_DECIMALS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_ALREADY_SET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_FOUND\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"initialCreditBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"initialTokenBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Burn\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"initialCreditBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ClaimTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"DeployERC20\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bool\",\"name\":\"tokensWereClaimed\",\"type\":\"bool\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Mint\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBToken\",\"name\":\"newToken\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetToken\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"TransferCredits\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"burnFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimTokensFor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"creditBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"deployERC20For\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"mintFor\"},{\"inputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"projectIdOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenOf\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalCreditSupplyOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalSupplyOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferCreditsFrom\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burnFrom(address,uint256,uint256)\":{\"details\":\"Credits are burned first, then tokens are burned.Only a project's current controller can burn its tokens.\",\"params\":{\"amount\":\"The amount of tokens to burn.\",\"holder\":\"The address that owns the tokens which are being burned.\",\"projectId\":\"The ID of the project to the burned tokens belong to.\"}},\"claimTokensFor(address,uint256,uint256,address)\":{\"details\":\"Only a project's controller can claim that project's tokens.\",\"params\":{\"amount\":\"The amount of tokens to claim.\",\"beneficiary\":\"The account into which the claimed tokens will go.\",\"holder\":\"The owner of the credits being redeemed.\",\"projectId\":\"The ID of the project whose tokens are being claimed.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"deployERC20For(uint256,string,string,bytes32)\":{\"details\":\"Deploys a project's ERC-20 token contract.Only a project's controller can deploy its token.\",\"params\":{\"name\":\"The ERC-20's name.\",\"projectId\":\"The ID of the project to deploy an ERC-20 token for.\",\"symbol\":\"The ERC-20's symbol.\"},\"returns\":{\"token\":\"The address of the token that was deployed.\"}},\"mintFor(address,uint256,uint256)\":{\"details\":\"Only a project's current controller can mint its tokens.\",\"params\":{\"amount\":\"The amount of tokens to mint.\",\"holder\":\"The address receiving the new tokens.\",\"projectId\":\"The ID of the project to which the tokens belong.\"}},\"setTokenFor(uint256,address)\":{\"details\":\"Only a project's controller can set its token.\",\"params\":{\"projectId\":\"The ID of the project to set the token of.\",\"token\":\"The new token's address.\"}},\"totalBalanceOf(address,uint256)\":{\"params\":{\"holder\":\"The holder to get a balance for.\",\"projectId\":\"The project to get the `_holder`s balance for.\"},\"returns\":{\"balance\":\"The combined token and token credit balance of the `_holder\"}},\"totalSupplyOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the total supply of.\"},\"returns\":{\"totalSupply\":\"The total supply of the project's tokens and token credits.\"}},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"details\":\"Only a project's controller can transfer credits for that project.\",\"params\":{\"amount\":\"The amount of credits to transfer.\",\"holder\":\"The address to transfer credits from.\",\"projectId\":\"The ID of the project whose credits are being transferred.\",\"recipient\":\"The recipient of the credits.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"burnFrom(address,uint256,uint256)\":{\"notice\":\"Burns (destroys) credits or tokens.\"},\"claimTokensFor(address,uint256,uint256,address)\":{\"notice\":\"Redeem credits to claim tokens into a holder's wallet.\"},\"creditBalanceOf(address,uint256)\":{\"notice\":\"Each holder's credit balance for each project.\"},\"deployERC20For(uint256,string,string,bytes32)\":{\"notice\":\"Deploys an ERC-20 token for a project. It will be used when claiming tokens.\"},\"mintFor(address,uint256,uint256)\":{\"notice\":\"Mint (create) new tokens or credits.\"},\"projectIdOf(address)\":{\"notice\":\"Each token's project.\"},\"setTokenFor(uint256,address)\":{\"notice\":\"Set a project's token if not already set.\"},\"tokenOf(uint256)\":{\"notice\":\"Each project's attached token contract.\"},\"totalBalanceOf(address,uint256)\":{\"notice\":\"The total balance a holder has for a specified project, including both tokens and token credits.\"},\"totalCreditSupplyOf(uint256)\":{\"notice\":\"The total supply of credits for each project.\"},\"totalSupplyOf(uint256)\":{\"notice\":\"The total supply for a specific project, including both tokens and token credits.\"},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"notice\":\"Allows a holder to transfer credits to another account.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBTokens.sol\":\"JBTokens\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947\",\"urls\":[\"bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856\",\"dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/Votes.sol\":{\"keccak256\":\"0xb8f69828d41b3594afd7a8c6393565901c205d8b5baf5bd2e42dbac637172979\",\"urls\":[\"bzz-raw://c790253821191ac46b2050d87df820d4209871f90c616381e2c2c00ff3eaac34\",\"dweb:/ipfs/QmcPETTyuZBzDRL39JNXj3SBMdx3Y9o4fPQLSZ27py5Jim\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol\":{\"keccak256\":\"0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818\",\"urls\":[\"bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a\",\"dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol\":{\"keccak256\":\"0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33\",\"urls\":[\"bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb\",\"dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee\",\"urls\":[\"bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2\",\"dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\":{\"keccak256\":\"0x2a650f6e593cfe5ff2e514a17ea7f593ee70cefa1888066bc983a6308acff4b1\",\"urls\":[\"bzz-raw://9a3477b9665a4b6d19f86bf2cfbfa8c08ba41193f15e68c0d75c0cab7e1fc753\",\"dweb:/ipfs/QmbcurrTatN1PBmkCWdrED8zhAqx5ah9Qp6uR8YwkKWA8V\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol\":{\"keccak256\":\"0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad\",\"urls\":[\"bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b\",\"dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"],\"license\":\"MIT\"},\"src/JBERC20.sol\":{\"keccak256\":\"0x3eb0cb3239aad4ee290ae9dec692717b05cd545f55606586c62faae5db24a61b\",\"urls\":[\"bzz-raw://7eef767e6389d1f85ef3acf5d39f4057d84f72ddc3c3101a37794371c4fada7a\",\"dweb:/ipfs/QmSMQRHSbMLZFp4wtHvqXCig7F8EqhXeAX9UvDEHL8gRb3\"],\"license\":\"MIT\"},\"src/JBTokens.sol\":{\"keccak256\":\"0xf88db3b695af2d6e0b824aca8b694c9eb6d7304d39f1d2384bf75845ee08bb74\",\"urls\":[\"bzz-raw://2e060749b067ef6c0543f5f29c2ab4e6374eba5cc744a1602f7cddd58af0938b\",\"dweb:/ipfs/QmUMXHBjiKLQWgvroQkh6tEMKotD7LAG4R6wjviqRiJ52J\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c63430008170033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "burnFrom(address,uint256,uint256)": { + "details": "Credits are burned first, then tokens are burned.Only a project's current controller can burn its tokens.", + "params": { + "amount": "The amount of tokens to burn.", + "holder": "The address that owns the tokens which are being burned.", + "projectId": "The ID of the project to the burned tokens belong to." + } + }, + "claimTokensFor(address,uint256,uint256,address)": { + "details": "Only a project's controller can claim that project's tokens.", + "params": { + "amount": "The amount of tokens to claim.", + "beneficiary": "The account into which the claimed tokens will go.", + "holder": "The owner of the credits being redeemed.", + "projectId": "The ID of the project whose tokens are being claimed." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "deployERC20For(uint256,string,string,bytes32)": { + "details": "Deploys a project's ERC-20 token contract.Only a project's controller can deploy its token.", + "params": { + "name": "The ERC-20's name.", + "projectId": "The ID of the project to deploy an ERC-20 token for.", + "symbol": "The ERC-20's symbol." + }, + "returns": { + "token": "The address of the token that was deployed." + } + }, + "mintFor(address,uint256,uint256)": { + "details": "Only a project's current controller can mint its tokens.", + "params": { + "amount": "The amount of tokens to mint.", + "holder": "The address receiving the new tokens.", + "projectId": "The ID of the project to which the tokens belong." + } + }, + "setTokenFor(uint256,address)": { + "details": "Only a project's controller can set its token.", + "params": { + "projectId": "The ID of the project to set the token of.", + "token": "The new token's address." + } + }, + "totalBalanceOf(address,uint256)": { + "params": { + "holder": "The holder to get a balance for.", + "projectId": "The project to get the `_holder`s balance for." + }, + "returns": { + "balance": "The combined token and token credit balance of the `_holder" + } + }, + "totalSupplyOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the total supply of." + }, + "returns": { + "totalSupply": "The total supply of the project's tokens and token credits." + } + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "details": "Only a project's controller can transfer credits for that project.", + "params": { + "amount": "The amount of credits to transfer.", + "holder": "The address to transfer credits from.", + "projectId": "The ID of the project whose credits are being transferred.", + "recipient": "The recipient of the credits." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "burnFrom(address,uint256,uint256)": { + "notice": "Burns (destroys) credits or tokens." + }, + "claimTokensFor(address,uint256,uint256,address)": { + "notice": "Redeem credits to claim tokens into a holder's wallet." + }, + "creditBalanceOf(address,uint256)": { + "notice": "Each holder's credit balance for each project." + }, + "deployERC20For(uint256,string,string,bytes32)": { + "notice": "Deploys an ERC-20 token for a project. It will be used when claiming tokens." + }, + "mintFor(address,uint256,uint256)": { + "notice": "Mint (create) new tokens or credits." + }, + "projectIdOf(address)": { + "notice": "Each token's project." + }, + "setTokenFor(uint256,address)": { + "notice": "Set a project's token if not already set." + }, + "tokenOf(uint256)": { + "notice": "Each project's attached token contract." + }, + "totalBalanceOf(address,uint256)": { + "notice": "The total balance a holder has for a specified project, including both tokens and token credits." + }, + "totalCreditSupplyOf(uint256)": { + "notice": "The total supply of credits for each project." + }, + "totalSupplyOf(uint256)": { + "notice": "The total supply for a specific project, including both tokens and token credits." + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "notice": "Allows a holder to transfer credits to another account." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBTokens.sol", + "chainId": "80001", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/polygon_mumbai/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json b/deployments/nana-core/polygon_mumbai/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json new file mode 100644 index 00000000..46af3851 --- /dev/null +++ b/deployments/nana-core/polygon_mumbai/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json @@ -0,0 +1,2140 @@ +{ + "_format": "sphinx-sol-execution-artifact-1", + "transactions": [ + { + "receipt": { + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "contractAddress": null, + "cumulativeGasUsed": "392352", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "392352", + "hash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "index": 0, + "logs": [ + { + "address": "0x8f3301c9Eada5642B5bB12FD047D3EBb2932E619", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x", + "index": 0, + "topics": [ + "0x0b28c2323855bc15db8c13b56a44651fbce72c8c916fd653f08851fb9ab1c62a", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 1, + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "index": 2, + "topics": [ + "0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e7761000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d", + "index": 3, + "topics": [ + "0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", + "0x000000000000000000000000a6b71e26c5e0845f74c812102ca7114b6a896ab2" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee709552", + "index": 4, + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x0000000000000000000000000000000000000000000000000029d1430f9b80000000000000000000000000000000000000000000000000003acdcbecda7530a300000000000000000000000000000000000000000000071d8d4c9706821722370000000000000000000000000000000000000000000000003aa3faa9cad9b0a300000000000000000000000000000000000000000000071d8d76684991b2a237", + "index": 5, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + } + ], + "logsBloom": "0x00000000080000000008000000000040800000400000000000000000024000000060008002000000000000000004000000008000000000000000000040000000000010000000000400000000000000800000000000000008004300200040000000000000000000000500000000000000000000100000000080000000000000000001010000000000000000000001000000000000000080000000800000000000200000000000000000000000000400020000000000000000000000200002004000000000000000200001000000041000000000000000000000100000000000000000080000001084000000400000000020000000000000100000000000100000", + "status": 1, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2" + }, + "response": { + "accessList": [], + "blockNumber": 46704644, + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "chainId": "80001", + "data": "0x1688f0b9000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee7095520000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4b63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "400769", + "gasPrice": "30000000015", + "hash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 448, + "signature": { + "networkV": null, + "r": "0x43b5fa0437ee22eb09a36753b425b68e6f35d761ea97cfa34274501c395b601b", + "s": "0x272f70c8bef2cece868321528868239f1af2e655ba6a71b05ff53cec79b69807", + "v": 28 + }, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "contractAddress": null, + "cumulativeGasUsed": "392352", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "392352", + "hash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "index": 0, + "logs": [ + { + "address": "0x8f3301c9Eada5642B5bB12FD047D3EBb2932E619", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x", + "index": 0, + "topics": [ + "0x0b28c2323855bc15db8c13b56a44651fbce72c8c916fd653f08851fb9ab1c62a", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 1, + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "index": 2, + "topics": [ + "0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e7761000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d", + "index": 3, + "topics": [ + "0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", + "0x000000000000000000000000a6b71e26c5e0845f74c812102ca7114b6a896ab2" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee709552", + "index": 4, + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "blockNumber": 46704644, + "data": "0x0000000000000000000000000000000000000000000000000029d1430f9b80000000000000000000000000000000000000000000000000003acdcbecda7530a300000000000000000000000000000000000000000000071d8d4c9706821722370000000000000000000000000000000000000000000000003aa3faa9cad9b0a300000000000000000000000000000000000000000000071d8d76684991b2a237", + "index": 5, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" + ], + "transactionHash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "transactionIndex": 0 + } + ], + "logsBloom": "0x00000000080000000008000000000040800000400000000000000000024000000060008002000000000000000004000000008000000000000000000040000000000010000000000400000000000000800000000000000008004300200040000000000000000000000500000000000000000000100000000080000000000000000001010000000000000000000001000000000000000080000000800000000000200000000000000000000000000400020000000000000000000000200002004000000000000000200001000000041000000000000000000000100000000000000000080000001084000000400000000020000000000000100000000000100000", + "status": 1, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2" + }, + "response": { + "accessList": [], + "blockNumber": 46704644, + "blockHash": "0x9dc0b216f7a516596fec4a85a629309ece5d827b88914da9b2f1405808613426", + "chainId": "80001", + "data": "0x1688f0b9000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee7095520000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4b63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "400769", + "gasPrice": "30000000015", + "hash": "0x2f96c068c2429c9978e379617f0df5e991c0d15c2041087c0b3fac291e0777dc", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 448, + "signature": { + "networkV": null, + "r": "0x43b5fa0437ee22eb09a36753b425b68e6f35d761ea97cfa34274501c395b601b", + "s": "0x272f70c8bef2cece868321528868239f1af2e655ba6a71b05ff53cec79b69807", + "v": 28 + }, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "blockNumber": 46704657, + "contractAddress": null, + "cumulativeGasUsed": "1620169", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "219818", + "hash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "index": 7, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "blockNumber": 46704657, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 43, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x8bc39c6cab72a24d422b8238c8ba7d784e757d1e0e32b459cda36912b5f4419a" + ], + "transactionHash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "blockNumber": 46704657, + "data": "0x000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c7000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "index": 44, + "topics": [ + "0x382c7aec02462c9b086aba9a7f8dbb1fb8bf336e7b624b0149eeca6726d0fb4a", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "transactionHash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "transactionIndex": 7 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "blockNumber": 46704657, + "data": "0x00000000000000000000000000000000000000000000000000176db2fe2838000000000000000000000000000000000000000000000000003aa3faa9ca7fe34300000000000000000000000000000000000000000000138274b06bb87b9ee2880000000000000000000000000000000000000000000000003a8c8cf6cc57ab4300000000000000000000000000000000000000000000138274c7d96b79c71a88", + "index": 45, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "transactionIndex": 7 + } + ], + "logsBloom": "0x40000000080000000000000000000000000000000008000000000010004000000040008000080020000000000040000000008000000000000000000000000000004000000000000000000008000000800000000020000000000100100000000000000000020000000000000000000800000000000000000080000008000000000001000000000000000100000020000000000000000000000000800000000000204000000010000000000000000000020000000000000000000000000002004000000000000000200001000008000000000000000000000000100000001020000000000000000000000000000000000000000000000020000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 46704657, + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "chainId": "80001", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003a48f38f83558025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e80246474100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006aa49564bda9905166cc1ba80eafd3730870651cb5b02c969870c74294f47f31ae7ea721b5c9674a7d174d225eda6004f26ea212c8246a13fbecd383501e03c1aadaa8de65657175d74e50c6b812a2fadebe862c14c9b0711cd26b76fdf15050bdd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004121633c363dd8a0f18d8991d070eb702210b013c33baaacd3ff4997347952e4b35329ea8ae6d1ae6fd305f94cd191bbdc99251e3bae89a0e540376e1bdcc17f991b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "229772", + "gasPrice": "30000000015", + "hash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 449, + "signature": { + "networkV": null, + "r": "0x3989a652281632a00530fd73bd49db8d5e76fca5bb730755801d3b2830de3d0e", + "s": "0x306d23ba73fd83dbf97a712685613d7532efea9507776b5d2ab7e85d0fd903b5", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "blockNumber": 46704657, + "contractAddress": null, + "cumulativeGasUsed": "1620169", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "219818", + "hash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "index": 7, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "blockNumber": 46704657, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 43, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x8bc39c6cab72a24d422b8238c8ba7d784e757d1e0e32b459cda36912b5f4419a" + ], + "transactionHash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "transactionIndex": 7 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "blockNumber": 46704657, + "data": "0x000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c7000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "index": 44, + "topics": [ + "0x382c7aec02462c9b086aba9a7f8dbb1fb8bf336e7b624b0149eeca6726d0fb4a", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "transactionHash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "transactionIndex": 7 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "blockNumber": 46704657, + "data": "0x00000000000000000000000000000000000000000000000000176db2fe2838000000000000000000000000000000000000000000000000003aa3faa9ca7fe34300000000000000000000000000000000000000000000138274b06bb87b9ee2880000000000000000000000000000000000000000000000003a8c8cf6cc57ab4300000000000000000000000000000000000000000000138274c7d96b79c71a88", + "index": 45, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "transactionIndex": 7 + } + ], + "logsBloom": "0x40000000080000000000000000000000000000000008000000000010004000000040008000080020000000000040000000008000000000000000000000000000004000000000000000000008000000800000000020000000000100100000000000000000020000000000000000000800000000000000000080000008000000000001000000000000000100000020000000000000000000000000800000000000204000000010000000000000000000020000000000000000000000000002004000000000000000200001000008000000000000000000000000100000001020000000000000000000000000000000000000000000000020000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 46704657, + "blockHash": "0xd9a9d6184c72e8aad8b6b42b774df32ed6291539173dd3436326ca15d0605e60", + "chainId": "80001", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003a48f38f83558025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e80246474100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006aa49564bda9905166cc1ba80eafd3730870651cb5b02c969870c74294f47f31ae7ea721b5c9674a7d174d225eda6004f26ea212c8246a13fbecd383501e03c1aadaa8de65657175d74e50c6b812a2fadebe862c14c9b0711cd26b76fdf15050bdd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004121633c363dd8a0f18d8991d070eb702210b013c33baaacd3ff4997347952e4b35329ea8ae6d1ae6fd305f94cd191bbdc99251e3bae89a0e540376e1bdcc17f991b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "229772", + "gasPrice": "30000000015", + "hash": "0x022ca9b7634df6c0d72bdc975d8b28ee67ed42de8158ef24b086e2e92ed47468", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 449, + "signature": { + "networkV": null, + "r": "0x3989a652281632a00530fd73bd49db8d5e76fca5bb730755801d3b2830de3d0e", + "s": "0x306d23ba73fd83dbf97a712685613d7532efea9507776b5d2ab7e85d0fd903b5", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 46704671, + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "chainId": "80001", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000d684e65ec46d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000000000000000000000000000000000000000000ee00000000000000000000000000000000000000000000000000000000000003b60000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000066c00000000000000000000000000000000000000000000000000000000000008360000000000000000000000000000000000000000000000000000000000000c3600000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e1410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002242e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002446b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d905190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067e88c99575b2b65f3e0c24c591592869bc0e693ee30be32132cfeb466cf783e64124d7d417e9ac8830c0ab01fbf72b05d6aa42a6e71b947621eafe446a38300aa08cd00ffc4d313f27520cd78e992e7e6468e2d580b928f044a57249d3baeb5216ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a40000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000009600000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084f3700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000008644c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c6343000817003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005cfcdbc595e4120b3ef1762fd33d1313fb02639334314d9825dad31a8a8987db35ba375ca763f0225cae6f1e23aeada3570f77af94f1a7dca209e93a629867760331cf7cd3076c657e7cb68a43436cfa42fd9ddccbfb6ddce4ae68318799fad6688e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000002ba000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000223fdc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000029c44c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643126074b2a1c06f23f0a1b683e38ddd24a542af55c9c7ee40971e0e8239e2de05db9c90cd3c6e8b818256fe5577dffe00f2641abf45aeb91ca156a050ab15c356dc19f469e0aad1b0a5b93060f06475f728578cfd1f0592345f547ed2dec15cc3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000018200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000017244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b1ac7a6d94a62fa1ae0306eac4d932bac63b499c891d9910644f143c9d0df8c1e7ea721b5c9674a7d174d225eda6004f26ea212c8246a13fbecd383501e03c1aadaa8de65657175d74e50c6b812a2fadebe862c14c9b0711cd26b76fdf15050bdd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000010a000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000fc00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dcc2d00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000ec44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608b136f8354183c1ffcaf9b560e08b43c2f277e4ee1a9f699d03bd482011098e6262e500528e11a0ed1ff534f822468068e85d6cf62227064de563b7ce8b3c8d0fffe3dde13e85617b8123ed886a63e6fe63c1b29f4d9f490f12bd2ed11f400dd260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001bc000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017d9ea00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000019e44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000668b4205fb1a79382c5e2935f1c85899f47f87a1216375170951ddd175d6587d74883108423dad0e8d2bd1e8e4573ecbd37c8fd00b5a9a953f2c49ac3f647ad3ad62764ed7964a47341d5a4d5ec7d0c91f71f52e24969cf1e2d2dcf1c0689955b16ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003f2000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003e400000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000377dab00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000003d444c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065fa86be3ea417ec57b13055519ef1e5e3e29f357c400fbada36e76b3e8210815200da3827bdd03006b38b9406be1e2613a29d90133f6475e629e78a4a1bb09ea9a6ec4c5ddb78c4dd4d84c2787a190f6f89358627bb3912918828e3eac95a352c3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000011200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e971800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010244c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000620274f533d6d45beaf56a43ab6d7d46e423f0cd9d3d899db897b9c3a6daf50e336e3fde06121457b0a43a8cfe7db52672c8b977d0b9bdcc94e7ace57c7d4ac48eb6ed4dcd1f1a75d90de282384be8e0806409ddf08a79ef0a7944116e84b7426d260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "11444250", + "gasPrice": "30000000015", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 450, + "signature": { + "networkV": null, + "r": "0xa5b89377db60f05402ef7c62e159c31d60083a4c30594072bffea01b1eb1adc7", + "s": "0x4a45e19c78c635150c8f27d949f9ae7e80ef8c3152d13a01b9ecceddf6ad915f", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "contractAddress": null, + "cumulativeGasUsed": "11078218", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "10951852", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "index": 1, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 4, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xcd0b344ddd1631182d69a2b8612b6e4f11fd38fd6ade0278c5532a0b2805bfc3" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 5, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 6, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 7, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 8, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 9, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 10, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 14, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 18, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 19, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 20, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 27, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x", + "index": 28, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 29, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "blockNumber": 46704671, + "data": "0x000000000000000000000000000000000000000000000000048f438a82c790000000000000000000000000000000000000000000000000003a8c8cf6cc255b4d00000000000000000000000000000000000000000000138276f0de142333f7bf00000000000000000000000000000000000000000000000035fd496c495dcb4d0000000000000000000000000000000000000000000013827b80219ea5fb87bf", + "index": 30, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" + ], + "transactionHash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "transactionIndex": 1 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800010004000000060008000000020000000000040000000008000000000000000000000000000000000000000200402000008820000800001000020000000000300000000000000000000020000004000000000000800000000100020000080000008000000400001000000000000000100800000000000080000000000000000804000000000204000080010000000000000000000020200000000000080000000000006004080000000000000200081000008000000000000000000000000100000001020000000400000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 46704671, + "blockHash": "0x69c7cd7e3847eae2da72bbf2de2ac386b2a6a8b732217c90533a79135e253700", + "chainId": "80001", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000d684e65ec46d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000000000000000000000000000000000000000000ee00000000000000000000000000000000000000000000000000000000000003b60000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000066c00000000000000000000000000000000000000000000000000000000000008360000000000000000000000000000000000000000000000000000000000000c3600000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e1410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002242e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002446b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d905190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067e88c99575b2b65f3e0c24c591592869bc0e693ee30be32132cfeb466cf783e64124d7d417e9ac8830c0ab01fbf72b05d6aa42a6e71b947621eafe446a38300aa08cd00ffc4d313f27520cd78e992e7e6468e2d580b928f044a57249d3baeb5216ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a40000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000009600000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084f3700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000008644c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c6343000817003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005cfcdbc595e4120b3ef1762fd33d1313fb02639334314d9825dad31a8a8987db35ba375ca763f0225cae6f1e23aeada3570f77af94f1a7dca209e93a629867760331cf7cd3076c657e7cb68a43436cfa42fd9ddccbfb6ddce4ae68318799fad6688e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000002ba000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000223fdc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000029c44c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643126074b2a1c06f23f0a1b683e38ddd24a542af55c9c7ee40971e0e8239e2de05db9c90cd3c6e8b818256fe5577dffe00f2641abf45aeb91ca156a050ab15c356dc19f469e0aad1b0a5b93060f06475f728578cfd1f0592345f547ed2dec15cc3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000018200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000017244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b1ac7a6d94a62fa1ae0306eac4d932bac63b499c891d9910644f143c9d0df8c1e7ea721b5c9674a7d174d225eda6004f26ea212c8246a13fbecd383501e03c1aadaa8de65657175d74e50c6b812a2fadebe862c14c9b0711cd26b76fdf15050bdd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000010a000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000fc00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dcc2d00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000ec44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608b136f8354183c1ffcaf9b560e08b43c2f277e4ee1a9f699d03bd482011098e6262e500528e11a0ed1ff534f822468068e85d6cf62227064de563b7ce8b3c8d0fffe3dde13e85617b8123ed886a63e6fe63c1b29f4d9f490f12bd2ed11f400dd260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001bc000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017d9ea00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000019e44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000668b4205fb1a79382c5e2935f1c85899f47f87a1216375170951ddd175d6587d74883108423dad0e8d2bd1e8e4573ecbd37c8fd00b5a9a953f2c49ac3f647ad3ad62764ed7964a47341d5a4d5ec7d0c91f71f52e24969cf1e2d2dcf1c0689955b16ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003f2000000000000000000000000000000000000000000000000000000000000138810000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003e400000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000377dab00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000003d444c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065fa86be3ea417ec57b13055519ef1e5e3e29f357c400fbada36e76b3e8210815200da3827bdd03006b38b9406be1e2613a29d90133f6475e629e78a4a1bb09ea9a6ec4c5ddb78c4dd4d84c2787a190f6f89358627bb3912918828e3eac95a352c3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000011200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e971800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010244c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000620274f533d6d45beaf56a43ab6d7d46e423f0cd9d3d899db897b9c3a6daf50e336e3fde06121457b0a43a8cfe7db52672c8b977d0b9bdcc94e7ace57c7d4ac48eb6ed4dcd1f1a75d90de282384be8e0806409ddf08a79ef0a7944116e84b7426d260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "11444250", + "gasPrice": "30000000015", + "hash": "0xbf9ca26369c3d3a6c1efc6276cc5ae9e6a05669b49a3c98ea7e63c871d557ed6", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 450, + "signature": { + "networkV": null, + "r": "0xa5b89377db60f05402ef7c62e159c31d60083a4c30594072bffea01b1eb1adc7", + "s": "0x4a45e19c78c635150c8f27d949f9ae7e80ef8c3152d13a01b9ecceddf6ad915f", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "contractAddress": null, + "cumulativeGasUsed": "9991364", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "9790647", + "hash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "index": 4, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 10, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x3fc7767f098b04907638e00fd7a27902f450f983c63e80014e8720d7ede69959" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 14, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 17, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 20, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 27, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 28, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 29, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 30, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000413803f48aff40000000000000000000000000000000000000000000000000035fd496c3f931d390000000000000000000000000000000000000000000000be84d13e42b3f049e600000000000000000000000000000000000000000000000031e9c92cf6e329390000000000000000000000000000000000000000000000be88e4be81fca03de6", + "index": 31, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000004ce0f825810371ea57fbcba98b2be98e730c10df" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000002008000000800000004000000060008000000000000000000040000080008000000100000000000000040000000000000000208400000008820000800001000020040000000300000000000000020000020000000000000000000800000004100021000080000008000000400001000000000000000100800000000200000000000000000000804000000020204000081010000000000000000000020208400040000080000000000006004000000000000000200081000008000000000000000000040000100002001060000000010000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 46704678, + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "chainId": "80001", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000bd24e65ec46d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000006300000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000000068e00000000000000000000000000000000000000000000000000000000000007960000000000000000000000000000000000000000000000000000000000000b54000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000006180000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000060a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053a10400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005fa44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005bed4505f2b16fad4aa85a50ab3131e75abf0515c5ee82b7d0453550d2098c68a4368a4dfd7b2a551d571f10e09439391ae91514c2f3eb0218921c3b7c0b4b469331cf7cd3076c657e7cb68a43436cfa42fd9ddccbfb6ddce4ae68318799fad6688e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae444000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cfa00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000044a1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed58200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c69da88bf8f4ebd359d7046ac03e821c541f75134bc0deae923e9713b7d0a86a5f95223271c97347b4db9f2fabcb90ca0070850ef1bd041003545982f3c02fe0fffe3dde13e85617b8123ed886a63e6fe63c1b29f4d9f490f12bd2ed11f400dd260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001058200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000024f2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064a7ea2e5c027b991083d4de1bb80de702e3df147b83edc5b8a9604114802cada090b77232cc54b6442ce1fdc93ccf19a9f4c40a90373b033302bf62cea5d82109a6ec4c5ddb78c4dd4d84c2787a190f6f89358627bb3912918828e3eac95a352c3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfac700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000dc44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067b10f7a3c1959ff5b786aa89bbc294225179857e4fe26937ff45ef0c67040c84ad2d1f7b3f723688b79173aac99f94e4c7fc09a1f676673a3faa52ddfc65ed91a08cd00ffc4d313f27520cd78e992e7e6468e2d580b928f044a57249d3baeb5216ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003a200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033647400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000039244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060ba6818ffdc1d4944f5b8eb6d49eb7a0a12f1b73859fbf271be60dd1122d364ba5f95223271c97347b4db9f2fabcb90ca0070850ef1bd041003545982f3c02fe0fffe3dde13e85617b8123ed886a63e6fe63c1b29f4d9f490f12bd2ed11f400dd260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004e44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000649b38a9b567f0bc32359c3890724b0861f6f922c25e59a7c1b91500d6155f35d090b77232cc54b6442ce1fdc93ccf19a9f4c40a90373b033302bf62cea5d82109a6ec4c5ddb78c4dd4d84c2787a190f6f89358627bb3912918828e3eac95a352c3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "10337431", + "gasPrice": "30000000015", + "hash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 451, + "signature": { + "networkV": null, + "r": "0x639d1d4e29db50b0d4403101fa947c91e34ba281567f8bf937918d53585534e6", + "s": "0x243ae6ef68254ef908d1983f834c7c29f9efc698b035c7fd65847a6abd6ce82b", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "contractAddress": null, + "cumulativeGasUsed": "9991364", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "9790647", + "hash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "index": 4, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 10, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x3fc7767f098b04907638e00fd7a27902f450f983c63e80014e8720d7ede69959" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 11, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 12, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 13, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 14, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 15, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 16, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 17, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 18, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 19, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 20, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 21, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 22, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 23, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 24, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 25, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 26, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 27, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 28, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x", + "index": 29, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 30, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "blockNumber": 46704678, + "data": "0x0000000000000000000000000000000000000000000000000413803f48aff40000000000000000000000000000000000000000000000000035fd496c3f931d390000000000000000000000000000000000000000000000be84d13e42b3f049e600000000000000000000000000000000000000000000000031e9c92cf6e329390000000000000000000000000000000000000000000000be88e4be81fca03de6", + "index": 31, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000004ce0f825810371ea57fbcba98b2be98e730c10df" + ], + "transactionHash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "transactionIndex": 4 + } + ], + "logsBloom": "0x00000000080010008008000000080000000000002008000000800000004000000060008000000000000000000040000080008000000100000000000000040000000000000000208400000008820000800001000020040000000300000000000000020000020000000000000000000800000004100021000080000008000000400001000000000000000100800000000200000000000000000000804000000020204000081010000000000000000000020208400040000080000000000006004000000000000000200081000008000000000000000000040000100002001060000000010000000004000000000000000200000000000000000000000000100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 46704678, + "blockHash": "0xb7e06a4a720e9bc8418032889e8154b29cde751f8541221ea13fd75fa9ad65e4", + "chainId": "80001", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000bd24e65ec46d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000006300000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000000068e00000000000000000000000000000000000000000000000000000000000007960000000000000000000000000000000000000000000000000000000000000b54000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000006180000000000000000000000000000000000000000000000000000000000001388100000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000060a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053a10400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005fa44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005bed4505f2b16fad4aa85a50ab3131e75abf0515c5ee82b7d0453550d2098c68a4368a4dfd7b2a551d571f10e09439391ae91514c2f3eb0218921c3b7c0b4b469331cf7cd3076c657e7cb68a43436cfa42fd9ddccbfb6ddce4ae68318799fad6688e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae444000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cfa00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000044a1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed58200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c69da88bf8f4ebd359d7046ac03e821c541f75134bc0deae923e9713b7d0a86a5f95223271c97347b4db9f2fabcb90ca0070850ef1bd041003545982f3c02fe0fffe3dde13e85617b8123ed886a63e6fe63c1b29f4d9f490f12bd2ed11f400dd260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001058200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000024f2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064a7ea2e5c027b991083d4de1bb80de702e3df147b83edc5b8a9604114802cada090b77232cc54b6442ce1fdc93ccf19a9f4c40a90373b033302bf62cea5d82109a6ec4c5ddb78c4dd4d84c2787a190f6f89358627bb3912918828e3eac95a352c3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfac700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000dc44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067b10f7a3c1959ff5b786aa89bbc294225179857e4fe26937ff45ef0c67040c84ad2d1f7b3f723688b79173aac99f94e4c7fc09a1f676673a3faa52ddfc65ed91a08cd00ffc4d313f27520cd78e992e7e6468e2d580b928f044a57249d3baeb5216ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003a200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033647400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000039244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060ba6818ffdc1d4944f5b8eb6d49eb7a0a12f1b73859fbf271be60dd1122d364ba5f95223271c97347b4db9f2fabcb90ca0070850ef1bd041003545982f3c02fe0fffe3dde13e85617b8123ed886a63e6fe63c1b29f4d9f490f12bd2ed11f400dd260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004e44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000649b38a9b567f0bc32359c3890724b0861f6f922c25e59a7c1b91500d6155f35d090b77232cc54b6442ce1fdc93ccf19a9f4c40a90373b033302bf62cea5d82109a6ec4c5ddb78c4dd4d84c2787a190f6f89358627bb3912918828e3eac95a352c3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "10337431", + "gasPrice": "30000000015", + "hash": "0x8f48beb4dc5b19377e22280b77236eec8a4f0c97b5f6d50b9be4314b1a994b7f", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 451, + "signature": { + "networkV": null, + "r": "0x639d1d4e29db50b0d4403101fa947c91e34ba281567f8bf937918d53585534e6", + "s": "0x243ae6ef68254ef908d1983f834c7c29f9efc698b035c7fd65847a6abd6ce82b", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "contractAddress": null, + "cumulativeGasUsed": "6385726", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "30000000015", + "gasUsed": "5665339", + "hash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "index": 3, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 14, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x8e0bab57bdbca8e06c9fb556904e519687719ec9808e4f263de92ed449e0dde9" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x00000000000000000000000012bb7bcc941b2e5ccef740d0e4317a5b35717d30", + "index": 15, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x", + "index": 16, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x000000000000000000000000000000000000000000000000000000000000000f", + "index": 17, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x", + "index": 18, + "topics": [ + "0x4383d976757d67ca920616be0b6430a681ea9d3dcce8d6d61d4603ca4a9bff63", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + }, + { + "address": "0x0000000000000000000000000000000000001010", + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "blockNumber": 46704685, + "data": "0x000000000000000000000000000000000000000000000000025bd1dfc6d0a40000000000000000000000000000000000000000000000000031e9c92cee2242800000000000000000000000000000000000000000000000be8d7bc1c13d627f750000000000000000000000000000000000000000000000002f8df74d27519e800000000000000000000000000000000000000000000000be8fd793a104332375", + "index": 19, + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x0000000000000000000000004ce0f825810371ea57fbcba98b2be98e730c10df" + ], + "transactionHash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "transactionIndex": 3 + } + ], + "logsBloom": "0x00000000080010000008000000080000000000000008000000000000004000000040008000000000000000000040000000008000000000200000000000000000000000000000200400000008020000800000000020000000000100000000000000000000000000000000000000000000000004100020000080000008000000000001000000000000000100000000000000000000000000000000804000000000204000800010000000000000000000020200000040000000000000000006004000000000000000200001000008000000000000000000000000100000001000000000000000000008000000000000000200000000000010000000000008100000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 46704685, + "blockHash": "0xdff8182481f2dbbdc6543d14727cbdb0fe3c0273f7ee3dc05bd7d2fe62ae2e51", + "chainId": "80001", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000066c4e65ec46d000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000065800000000000000000000000000000000000000000000000000000000000013881000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000064a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057de6c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000063a44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000632c6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000663125441049054d587834a970a50ce255b7621dddfc3d29ffbb8c593339595194883108423dad0e8d2bd1e8e4573ecbd37c8fd00b5a9a953f2c49ac3f647ad3ad62764ed7964a47341d5a4d5ec7d0c91f71f52e24969cf1e2d2dcf1c0689955b16ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "6672227", + "gasPrice": "30000000015", + "hash": "0x651481ef0a937de3ee9ec9432046f2879a86e77b98b8c99abe4b0112fc5bac79", + "maxFeePerGas": "30000000015", + "maxPriorityFeePerGas": "30000000000", + "nonce": 452, + "signature": { + "networkV": null, + "r": "0x835604ff6747c1cb350558c76328c14574009eb0c8eb49052cbd4e23a6e58c04", + "s": "0x6864972b85d0cb01406f0694e15d2364b88e882ca2f8f8eaf4bef033a450f088", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + } + ], + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "solcInputHashes": [ + "b2112d617c776ac2cceb92d11c578094" + ], + "safeAddress": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "moduleAddress": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "executorAddress": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "nonce": "0", + "chainId": "80001", + "actions": [ + { + "to": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141", + "value": "0", + "txData": "0x46b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d90519", + "gas": "140334", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c6343000817003300000000000000000000000000000000", + "gas": "544567", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000", + "gas": "2244572", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000", + "gas": "1351808", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000", + "gas": "904237", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000", + "gas": "1563114", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000", + "gas": "3636651", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000", + "gas": "956184", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000000000000000", + "gas": "5480708", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "value": "0", + "txData": "0xa1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed5820000000000000000000000000000000000000000000000000000000000000001", + "gas": "89338", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "value": "0", + "txData": "0xf2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad", + "gas": "66946", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000", + "gas": "785095", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e90000000000000000", + "gas": "3368052", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000", + "gas": "316627", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000632c6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000", + "gas": "5758572", + "operation": 1, + "requireSuccess": true + } + ], + "sphinxConfig": { + "projectName": "nana-core", + "orgId": "cltepuu9u0003j58rjtbd0hvu", + "owners": [ + "0x26416423d530b1931A2a7a6b7D435Fac65eED27d" + ], + "mainnets": [ + "ethereum", + "optimism", + "polygon" + ], + "testnets": [ + "ethereum_sepolia", + "optimism_sepolia", + "polygon_mumbai" + ], + "threshold": "1", + "saltNonce": "0" + }, + "executionMode": 2, + "initialState": { + "isSafeDeployed": false, + "isModuleDeployed": false, + "isExecuting": false + }, + "unlabeledContracts": [], + "arbitraryChain": false, + "libraries": [], + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "safeInitData": "0xb63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBController.json b/deployments/nana-core/sepolia/JBController.json new file mode 100644 index 00000000..fc5b1d4a --- /dev/null +++ b/deployments/nana-core/sepolia/JBController.json @@ -0,0 +1,3441 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBController", + "address": "0xdAF6226Aafe296bbCCBEC815133386Cd910Ed582", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "rulesets", + "type": "address", + "internalType": "contract IJBRulesets" + }, + { + "name": "tokens", + "type": "address", + "internalType": "contract IJBTokens" + }, + { + "name": "splits", + "type": "address", + "internalType": "contract IJBSplits" + }, + { + "name": "fundAccessLimits", + "type": "address", + "internalType": "contract IJBFundAccessLimits" + }, + { + "name": "trustedForwarder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FUND_ACCESS_LIMITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBFundAccessLimits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "RULESETS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBRulesets" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SPLITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBSplits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "TOKENS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTokens" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "burnTokensOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimTokensFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "currentRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployERC20For", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTrustedForwarder", + "inputs": [ + { + "name": "forwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestQueuedRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approvalStatus", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "launchProjectFor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "projectUri", + "type": "string", + "internalType": "string" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "terminalConfigurations", + "type": "tuple[]", + "internalType": "struct JBTerminalConfig[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "tokensToAccept", + "type": "address[]", + "internalType": "address[]" + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "launchRulesetsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "terminalConfigurations", + "type": "tuple[]", + "internalType": "struct JBTerminalConfig[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "tokensToAccept", + "type": "address[]", + "internalType": "address[]" + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "migrateController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "to", + "type": "address", + "internalType": "contract IJBMigratable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mintTokensOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "useReservedRate", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "payReservedTokenToTerminal", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + }, + { + "name": "splitAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pendingReservedTokenBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "queueRulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetConfigurations", + "type": "tuple[]", + "internalType": "struct JBRulesetConfig[]", + "components": [ + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + }, + { + "name": "fundAccessLimitGroups", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ] + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "receiveMigrationFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "contract IERC165" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startingId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "size", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "rulesets", + "type": "tuple[]", + "internalType": "struct JBRulesetWithMetadata[]", + "components": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sendReservedTokensToSplitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setControllerAllowed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setSplitGroupsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTerminalsAllowed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setTokenFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setUriOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalTokenSupplyWithReservedTokensOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferCreditsFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "trustedForwarder", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "upcomingRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "metadata", + "type": "tuple", + "internalType": "struct JBRulesetMetadata", + "components": [ + { + "name": "reservedRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pausePay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "pauseCreditTransfers", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowOwnerMinting", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowTerminalMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetTerminals", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowControllerMigration", + "type": "bool", + "internalType": "bool" + }, + { + "name": "allowSetController", + "type": "bool", + "internalType": "bool" + }, + { + "name": "holdFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useTotalSurplusForRedemptions", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForPay", + "type": "bool", + "internalType": "bool" + }, + { + "name": "useDataHookForRedeem", + "type": "bool", + "internalType": "bool" + }, + { + "name": "dataHook", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uriOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "BurnTokens", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LaunchProject", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LaunchRulesets", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "to", + "type": "address", + "indexed": false, + "internalType": "contract IJBMigratable" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MintTokens", + "inputs": [ + { + "name": "beneficiary", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "reservedRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PrepMigration", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "from", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "QueueRulesets", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservedDistributionReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendReservedTokensToSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendReservedTokensToSplits", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetMetadata", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "CONTROLLER_MIGRATION_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "CREDIT_TRANSFERS_PAUSED", + "inputs": [] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_BASE_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_REDEMPTION_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RESERVED_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "MINT_NOT_ALLOWED_AND_NOT_TERMINAL_OR_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "NO_BURNABLE_TOKENS", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "RULESET_ALREADY_LAUNCHED", + "inputs": [] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "ZERO_TOKENS_TO_MINT", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "contractAddress": null, + "cumulativeGasUsed": "16393579", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1014514380", + "gasUsed": "9789398", + "hash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "index": 60, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 67, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x6daf75799cd1798b187fd5ba7fad6ef446eee635c5906fc027f3e7704902c8f0" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 68, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 69, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 70, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 71, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 72, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 73, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 74, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 75, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 76, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 77, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 78, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 79, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 80, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 81, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 82, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 83, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 84, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 85, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 86, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 87, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + } + ], + "logsBloom": "0x00000010080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040800000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000000000000000100800000000200000000000000000000804000000020004000081010000000000000000000020208c00000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBRulesets\",\"name\":\"rulesets\",\"type\":\"address\"},{\"internalType\":\"contract IJBTokens\",\"name\":\"tokens\",\"type\":\"address\"},{\"internalType\":\"contract IJBSplits\",\"name\":\"splits\",\"type\":\"address\"},{\"internalType\":\"contract IJBFundAccessLimits\",\"name\":\"fundAccessLimits\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_MIGRATION_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CREDIT_TRANSFERS_PAUSED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_BASE_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_REDEMPTION_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RESERVED_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"MINT_NOT_ALLOWED_AND_NOT_TERMINAL_OR_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NO_BURNABLE_TOKENS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RULESET_ALREADY_LAUNCHED\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ZERO_TOKENS_TO_MINT\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"BurnTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"LaunchProject\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"LaunchRulesets\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBMigratable\",\"name\":\"to\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MigrateController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MintTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"PrepMigration\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"QueueRulesets\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ReservedDistributionReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendReservedTokensToSplit\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendReservedTokensToSplits\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetMetadata\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FUND_ACCESS_LIMITS\",\"outputs\":[{\"internalType\":\"contract IJBFundAccessLimits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"RULESETS\",\"outputs\":[{\"internalType\":\"contract IJBRulesets\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"SPLITS\",\"outputs\":[{\"internalType\":\"contract IJBSplits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"TOKENS\",\"outputs\":[{\"internalType\":\"contract IJBTokens\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"burnTokensOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimTokensFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"deployERC20For\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestQueuedRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"approvalStatus\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"projectUri\",\"type\":\"string\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"struct JBTerminalConfig[]\",\"name\":\"terminalConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokensToAccept\",\"type\":\"address[]\"}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"launchProjectFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"struct JBTerminalConfig[]\",\"name\":\"terminalConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokensToAccept\",\"type\":\"address[]\"}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"launchRulesetsFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBMigratable\",\"name\":\"to\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateController\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"useReservedRate\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"mintTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"splitAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"payReservedTokenToTerminal\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"pendingReservedTokenBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRulesetConfig[]\",\"name\":\"rulesetConfigurations\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}]},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"queueRulesetsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"contract IERC165\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"receiveMigrationFrom\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startingId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rulesetsOf\",\"outputs\":[{\"internalType\":\"struct JBRulesetWithMetadata[]\",\"name\":\"rulesets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"sendReservedTokensToSplitsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"setControllerAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setSplitGroupsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"setTerminalsAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setUriOf\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalTokenSupplyWithReservedTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferCreditsFrom\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upcomingRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBRulesetMetadata\",\"name\":\"metadata\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"reservedRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrency\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"pausePay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"pauseCreditTransfers\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowOwnerMinting\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowTerminalMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetTerminals\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowControllerMigration\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowSetController\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"holdFees\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplusForRedemptions\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForPay\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useDataHookForRedeem\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"dataHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"uriOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burnTokensOf(address,uint256,uint256,string)\":{\"details\":\"Only a token holder, an operator with the `BURN_TOKENS` permission from them, or a project's terminal can burn a holder's tokens.\",\"params\":{\"holder\":\"The account whose tokens are being burned.\",\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project that the tokens being burned belong to.\",\"tokenCount\":\"The number of tokens to burn.\"}},\"claimTokensFor(address,uint256,uint256,address)\":{\"details\":\"Only a credit holder or an operator with the `CLAIM_TOKENS` permission from that holder can redeem those credits to claim tokens.\",\"params\":{\"amount\":\"The amount of tokens to claim.\",\"beneficiary\":\"The account into which the claimed tokens will go.\",\"holder\":\"The owner of the credits being redeemed.\",\"projectId\":\"The ID of the project whose tokens are being claimed.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"fundAccessLimits\":\"A contract that stores fund access limits for each project.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\",\"rulesets\":\"A contract storing and managing project rulesets.\",\"splits\":\"A contract that stores splits for each project.\",\"tokens\":\"A contract that manages token minting and burning.\"}},\"currentRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The current ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The current ruleset as a `JBRuleset` struct.\"}},\"deployERC20For(uint256,string,string,bytes32)\":{\"details\":\"Deploys a project's ERC-20 token contract.Only a project's owner or an operator with `ISSUE_TOKENS` permission from the owner can deploy its token.\",\"params\":{\"name\":\"The ERC-20's name.\",\"projectId\":\"The ID of the project to deploy an ERC-20 token for.\",\"symbol\":\"The ERC-20's symbol.\"},\"returns\":{\"token\":\"The address of the token that was deployed.\"}},\"getRulesetOf(uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The ruleset as a `JBRuleset` struct.\"}},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"latestQueuedRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"approvalStatus\":\"The approval status of the ruleset.\",\"metadata\":\"The latest queued ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The latest queued ruleset as a `JBRuleset` struct.\"}},\"launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"details\":\"Each operation within this transaction can be done in sequence separately.Anyone can deploy a project on an owner's behalf.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"owner\":\"The address to set as the owner of the project. The project ERC-721 will be owned by this address.\",\"projectUri\":\"A URI to associate with the project. This can be updated any time by the owner of the project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.\",\"rulesetConfigurations\":\"The ruleset configurations to queue.\",\"terminalConfigurations\":\"The terminal configurations to add for the project.\"},\"returns\":{\"projectId\":\"The ID of the project.\"}},\"launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"details\":\"Each operation within this transaction can be done in sequence separately.Only a project's owner or an operator with the `QUEUE_RULESETS` permission can launch rulesets for a project.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project to launch rulesets for.\",\"rulesetConfigurations\":\"The ruleset configurations to queue.\",\"terminalConfigurations\":\"The terminal configurations to add for the project.\"},\"returns\":{\"rulesetId\":\"The ID of the ruleset that was successfully launched.\"}},\"migrateController(uint256,address)\":{\"details\":\"Only a project's owner or an operator with the `MIGRATE_CONTROLLER` permission from the owner can migrate it.\",\"params\":{\"projectId\":\"The ID of the project that will be migrated from this controller.\",\"to\":\"The controller the project is migrating to.\"}},\"mintTokensOf(uint256,uint256,address,string,bool)\":{\"details\":\"Only a project's owner, an operator with the `MINT_TOKENS` permission from them, one of the project's terminals, or its current data hook can mint a project's tokens.If the ruleset has discretionary minting disabled, this function can only be called by the terminal or data hook.\",\"params\":{\"beneficiary\":\"The account which will receive the (non-reserved) minted tokens.\",\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project the tokens being minted belong to.\",\"tokenCount\":\"The total number of tokens to mint, including any tokens that will be reserved.\",\"useReservedRate\":\"Whether to use the current ruleset's reserved rate in the minting calculations.\"},\"returns\":{\"beneficiaryTokenCount\":\"The number of tokens minted for the beneficiary.\"}},\"payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)\":{\"details\":\"Can only be called by this terminal itself.\",\"params\":{\"beneficiary\":\"The beneficiary of the payment.\",\"metadata\":\"The metadata that gets send to the terminal.\",\"projectId\":\"The projectId that is being paid.\",\"splitAmount\":\"The amount that is being send to the terminal as part of this split.\",\"terminal\":\"The terminal to pay the token to.\",\"token\":\"The token that is being paid.\"}},\"queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)\":{\"details\":\"Only a project's owner or an operator with the `QUEUE_RULESETS` permission from them can queue rulesets for a project.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project that rulesets are being queued for.\",\"rulesetConfigurations\":\"The configurations of the rulesets to queue.\"},\"returns\":{\"rulesetId\":\"The ID of the last ruleset which was successfully queued.\"}},\"receiveMigrationFrom(address,uint256)\":{\"details\":\"This controller should not yet be the project's controller.\",\"params\":{\"from\":\"The controller being migrated from.\",\"projectId\":\"The ID of the project that will be migrated to this controller.\"}},\"rulesetsOf(uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the rulesets of.\",\"size\":\"The maximum number of rulesets to return.\",\"startingId\":\"The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used.\"},\"returns\":{\"rulesets\":\"The rulesets with their metadata as an array of `JBRulesetWithMetadata` structs.\"}},\"sendReservedTokensToSplitsOf(uint256,string)\":{\"details\":\"If the project has no reserved token splits, or they don't add up to 100%, the leftover tokens are minted to the project's owner.\",\"params\":{\"memo\":\"A memo to pass along to the emitted event.\",\"projectId\":\"The ID of the project to which the reserved tokens belong.\"},\"returns\":{\"_0\":\"The amount of reserved tokens minted and sent.\"}},\"setControllerAllowed(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the flag is for.\"},\"returns\":{\"_0\":\"The flag\"}},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"details\":\"Only a project's owner or an operator with `SET_SPLITS` permission from the owner can set its splits through the project's controller.The new split groups must include any currently set splits that are locked.\",\"params\":{\"projectId\":\"The ID of the project split groups are being set for.\",\"rulesetId\":\"The ID of the ruleset the split groups should be active in. Use a `rulesetId` of 0 to set the default split groups which are active when a project's ruleset has no splits set. If no default splits have been set, all splits are sent to the project's owner.\",\"splitGroups\":\"An array of split groups to set.\"}},\"setTerminalsAllowed(uint256)\":{\"params\":{\"projectId\":\"The ID of the project the flag is for.\"},\"returns\":{\"_0\":\"The flag\"}},\"setTokenFor(uint256,address)\":{\"details\":\"Only a project's owner or an operator with `SET_TOKEN` permission from the owner can set its token.\",\"params\":{\"projectId\":\"The ID of the project to set the token of.\",\"token\":\"The new token's address.\"}},\"setUriOf(uint256,string)\":{\"details\":\"Only a project's owner can set its metadata through the project's controller.Frontends typically use an IPFS hash for the metadata content, optionally with the `ipfs://` prefix.\",\"params\":{\"metadata\":\"The metadata content to set.\",\"projectId\":\"The ID of the project to set the metadata of.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"totalTokenSupplyWithReservedTokensOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the total token supply of.\"},\"returns\":{\"_0\":\"The current total token supply of the project, including pending reserved tokens that have not been sent to splits yet.\"}},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"details\":\"Only a credit holder or an operator with the `TRANSFER_TOKENS` permission from that holder can transfer those credits.\",\"params\":{\"amount\":\"The amount of credits to transfer.\",\"holder\":\"The address to transfer credits from.\",\"projectId\":\"The ID of the project whose credits are being transferred.\",\"recipient\":\"The recipient of the credits.\"}},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"upcomingRulesetOf(uint256)\":{\"details\":\"If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project the ruleset belongs to.\"},\"returns\":{\"metadata\":\"The upcoming ruleset's metadata as a `JBRulesetMetadata` struct.\",\"ruleset\":\"The upcoming ruleset as a `JBRuleset` struct.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"FUND_ACCESS_LIMITS()\":{\"notice\":\"A contract that stores fund access limits for each project.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"RULESETS()\":{\"notice\":\"The contract storing and managing project rulesets.\"},\"SPLITS()\":{\"notice\":\"The contract that stores splits for each project.\"},\"TOKENS()\":{\"notice\":\"The contract that manages token minting and burning.\"},\"burnTokensOf(address,uint256,uint256,string)\":{\"notice\":\"Burns a project's tokens from a specific holder's balance.\"},\"claimTokensFor(address,uint256,uint256,address)\":{\"notice\":\"Redeem credits to claim tokens into a holder's wallet.\"},\"currentRulesetOf(uint256)\":{\"notice\":\"A project's current ruleset along with its metadata.\"},\"deployERC20For(uint256,string,string,bytes32)\":{\"notice\":\"Deploys an ERC-20 token for a project. It will be used when claiming tokens (with credits).\"},\"getRulesetOf(uint256,uint256)\":{\"notice\":\"A get `JBRuleset` and `JBRulesetMetadata` structs for the specified `rulesetId`.\"},\"latestQueuedRulesetOf(uint256)\":{\"notice\":\"The latest ruleset queued for a project. Returns the ruleset's struct, its current approval status, and its metadata.\"},\"launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"notice\":\"Creates a project. This will mint the project's ERC-721 to the specified owner's account, queue its first ruleset, and set up any splits.\"},\"launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)\":{\"notice\":\"Creates an initial sequence of one or more rulesets for an existing project.\"},\"migrateController(uint256,address)\":{\"notice\":\"Allows a project to migrate from this controller to another one.\"},\"mintTokensOf(uint256,uint256,address,string,bool)\":{\"notice\":\"Mint new project tokens into an account, optionally reserving a portion according to the current ruleset's reserved rate.\"},\"payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)\":{\"notice\":\"Pay the reserved rate tokens to a projects terminal.\"},\"pendingReservedTokenBalanceOf(uint256)\":{\"notice\":\"The reserved token balance that has not yet been realized (sent out to the reserved split group) for a project.\"},\"queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)\":{\"notice\":\"Queues one or more rulesets that will take effect once the current ruleset expires. Rulesets only take effect if they are approved by the previous ruleset's approval hook.\"},\"receiveMigrationFrom(address,uint256)\":{\"notice\":\"Allows other controllers to signal to this one that a migration is expected for the specified project.\"},\"rulesetsOf(uint256,uint256,uint256)\":{\"notice\":\"Get an array of a project's rulesets (with metadata) up to a maximum array size, sorted from latest to earliest.\"},\"sendReservedTokensToSplitsOf(uint256,string)\":{\"notice\":\"Sends a project's pending reserved tokens to its reserved token splits.\"},\"setControllerAllowed(uint256)\":{\"notice\":\"A flag indicating if the project currently allows its controller to be set.\"},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"notice\":\"Sets a project's split groups.\"},\"setTerminalsAllowed(uint256)\":{\"notice\":\"A flag indicating if the project currently allows terminals to be set.\"},\"setTokenFor(uint256,address)\":{\"notice\":\"Set a project's token if not already set.\"},\"setUriOf(uint256,string)\":{\"notice\":\"Set a project's metadata URI content.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"totalTokenSupplyWithReservedTokensOf(uint256)\":{\"notice\":\"Gets the current token supply of a project, including pending reserved tokens.\"},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"notice\":\"Allows a holder to transfer credits to another account.\"},\"upcomingRulesetOf(uint256)\":{\"notice\":\"A project's upcoming ruleset along with its metadata.\"},\"uriOf(uint256)\":{\"notice\":\"The metadata URI for each project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBController.sol\":\"JBController\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBController.sol\":{\"keccak256\":\"0x2098a78f94e5ea023725c3fd27c40ab370f4940b681d7d70425d9c0dc870e818\",\"urls\":[\"bzz-raw://082dae16d5ab57042d17918f2076b9c5d5eb69ca77336311e0caa9a9a60de881\",\"dweb:/ipfs/QmQWZJVzvrTc7P63CjiMDAq4PYnBTG1X4t2ArxNa4RWeYc\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetDataHook.sol\":{\"keccak256\":\"0x3fea9fcab6f0335e67f0f052cf5d3446e9310808f88b5878d21586be00f89f85\",\"urls\":[\"bzz-raw://5506848f471d308a14523f91202d76d960f8255e227d29d34b0892ef70315cae\",\"dweb:/ipfs/QmakRKFctSZobpem1caU2zXqhiPQnaYVa7Y6NdAPAonHaU\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/libraries/JBSplitGroupIds.sol\":{\"keccak256\":\"0x932ca2645d443f04f86c8ffb27b5c58c4fbdc7b5a145fba1d43f1db9bd488a0f\",\"urls\":[\"bzz-raw://fa412d2c5726a868a258cd518648726b0784ab7ac7566376b82ba09680f66227\",\"dweb:/ipfs/QmZvfjBt7PQzTWNzrhysyHBegUbbu4aY2xDzBGnwqMaqnF\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBBeforePayRecordedContext.sol\":{\"keccak256\":\"0x5b04e814da83c7e83ff892ab07eaad6abce6f7b85a75f8da9380e9fc3470bc81\",\"urls\":[\"bzz-raw://11c889aab993fce3e3cc2dedc15fc30dd367e7fef9b7b1bfd6a6a9f248781731\",\"dweb:/ipfs/QmVVtydCD1azeWhGLxA1hthxfLyKzMHZ1eVzCz3a3R5dLy\"],\"license\":\"MIT\"},\"src/structs/JBBeforeRedeemRecordedContext.sol\":{\"keccak256\":\"0x73eadaf6827e82f6ccbe3a1e2b2b7fc6c59cef471f73335041b30ddcc000989d\",\"urls\":[\"bzz-raw://2f3ee84662eed565dbdaed406ef836fffaf55cccd417575578152e5085d0b1f2\",\"dweb:/ipfs/QmaJGFS7hxJsiUdKvbv5BKhSwceDEzKBnt7t5YeNWvYgMK\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "0x3295C9c7374E583cb2e6Ed455EAf9908022159D0", + "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "0x2Fd39295dd948dfBB8Aa7e2508ea5Fc15096682b", + "0xB2b5841DBeF766d4b521221732F9B618fCf34A87" + ], + "bytecode": "0x6101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da581565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876102ae565b6102ae7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb81565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6102ae7f0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b81565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d79091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b16935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da56001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d06001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "burnTokensOf(address,uint256,uint256,string)": { + "details": "Only a token holder, an operator with the `BURN_TOKENS` permission from them, or a project's terminal can burn a holder's tokens.", + "params": { + "holder": "The account whose tokens are being burned.", + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project that the tokens being burned belong to.", + "tokenCount": "The number of tokens to burn." + } + }, + "claimTokensFor(address,uint256,uint256,address)": { + "details": "Only a credit holder or an operator with the `CLAIM_TOKENS` permission from that holder can redeem those credits to claim tokens.", + "params": { + "amount": "The amount of tokens to claim.", + "beneficiary": "The account into which the claimed tokens will go.", + "holder": "The owner of the credits being redeemed.", + "projectId": "The ID of the project whose tokens are being claimed." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "fundAccessLimits": "A contract that stores fund access limits for each project.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers.", + "rulesets": "A contract storing and managing project rulesets.", + "splits": "A contract that stores splits for each project.", + "tokens": "A contract that manages token minting and burning." + } + }, + "currentRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The current ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The current ruleset as a `JBRuleset` struct." + } + }, + "deployERC20For(uint256,string,string,bytes32)": { + "details": "Deploys a project's ERC-20 token contract.Only a project's owner or an operator with `ISSUE_TOKENS` permission from the owner can deploy its token.", + "params": { + "name": "The ERC-20's name.", + "projectId": "The ID of the project to deploy an ERC-20 token for.", + "symbol": "The ERC-20's symbol." + }, + "returns": { + "token": "The address of the token that was deployed." + } + }, + "getRulesetOf(uint256,uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The ruleset as a `JBRuleset` struct." + } + }, + "isTrustedForwarder(address)": { + "details": "Indicates whether any particular address is the trusted forwarder." + }, + "latestQueuedRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "approvalStatus": "The approval status of the ruleset.", + "metadata": "The latest queued ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The latest queued ruleset as a `JBRuleset` struct." + } + }, + "launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "details": "Each operation within this transaction can be done in sequence separately.Anyone can deploy a project on an owner's behalf.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "owner": "The address to set as the owner of the project. The project ERC-721 will be owned by this address.", + "projectUri": "A URI to associate with the project. This can be updated any time by the owner of the project. This is typically an IPFS hash, optionally with the `ipfs://` prefix.", + "rulesetConfigurations": "The ruleset configurations to queue.", + "terminalConfigurations": "The terminal configurations to add for the project." + }, + "returns": { + "projectId": "The ID of the project." + } + }, + "launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "details": "Each operation within this transaction can be done in sequence separately.Only a project's owner or an operator with the `QUEUE_RULESETS` permission can launch rulesets for a project.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project to launch rulesets for.", + "rulesetConfigurations": "The ruleset configurations to queue.", + "terminalConfigurations": "The terminal configurations to add for the project." + }, + "returns": { + "rulesetId": "The ID of the ruleset that was successfully launched." + } + }, + "migrateController(uint256,address)": { + "details": "Only a project's owner or an operator with the `MIGRATE_CONTROLLER` permission from the owner can migrate it.", + "params": { + "projectId": "The ID of the project that will be migrated from this controller.", + "to": "The controller the project is migrating to." + } + }, + "mintTokensOf(uint256,uint256,address,string,bool)": { + "details": "Only a project's owner, an operator with the `MINT_TOKENS` permission from them, one of the project's terminals, or its current data hook can mint a project's tokens.If the ruleset has discretionary minting disabled, this function can only be called by the terminal or data hook.", + "params": { + "beneficiary": "The account which will receive the (non-reserved) minted tokens.", + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project the tokens being minted belong to.", + "tokenCount": "The total number of tokens to mint, including any tokens that will be reserved.", + "useReservedRate": "Whether to use the current ruleset's reserved rate in the minting calculations." + }, + "returns": { + "beneficiaryTokenCount": "The number of tokens minted for the beneficiary." + } + }, + "payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)": { + "details": "Can only be called by this terminal itself.", + "params": { + "beneficiary": "The beneficiary of the payment.", + "metadata": "The metadata that gets send to the terminal.", + "projectId": "The projectId that is being paid.", + "splitAmount": "The amount that is being send to the terminal as part of this split.", + "terminal": "The terminal to pay the token to.", + "token": "The token that is being paid." + } + }, + "queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)": { + "details": "Only a project's owner or an operator with the `QUEUE_RULESETS` permission from them can queue rulesets for a project.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project that rulesets are being queued for.", + "rulesetConfigurations": "The configurations of the rulesets to queue." + }, + "returns": { + "rulesetId": "The ID of the last ruleset which was successfully queued." + } + }, + "receiveMigrationFrom(address,uint256)": { + "details": "This controller should not yet be the project's controller.", + "params": { + "from": "The controller being migrated from.", + "projectId": "The ID of the project that will be migrated to this controller." + } + }, + "rulesetsOf(uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the rulesets of.", + "size": "The maximum number of rulesets to return.", + "startingId": "The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used." + }, + "returns": { + "rulesets": "The rulesets with their metadata as an array of `JBRulesetWithMetadata` structs." + } + }, + "sendReservedTokensToSplitsOf(uint256,string)": { + "details": "If the project has no reserved token splits, or they don't add up to 100%, the leftover tokens are minted to the project's owner.", + "params": { + "memo": "A memo to pass along to the emitted event.", + "projectId": "The ID of the project to which the reserved tokens belong." + }, + "returns": { + "_0": "The amount of reserved tokens minted and sent." + } + }, + "setControllerAllowed(uint256)": { + "params": { + "projectId": "The ID of the project the flag is for." + }, + "returns": { + "_0": "The flag" + } + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "details": "Only a project's owner or an operator with `SET_SPLITS` permission from the owner can set its splits through the project's controller.The new split groups must include any currently set splits that are locked.", + "params": { + "projectId": "The ID of the project split groups are being set for.", + "rulesetId": "The ID of the ruleset the split groups should be active in. Use a `rulesetId` of 0 to set the default split groups which are active when a project's ruleset has no splits set. If no default splits have been set, all splits are sent to the project's owner.", + "splitGroups": "An array of split groups to set." + } + }, + "setTerminalsAllowed(uint256)": { + "params": { + "projectId": "The ID of the project the flag is for." + }, + "returns": { + "_0": "The flag" + } + }, + "setTokenFor(uint256,address)": { + "details": "Only a project's owner or an operator with `SET_TOKEN` permission from the owner can set its token.", + "params": { + "projectId": "The ID of the project to set the token of.", + "token": "The new token's address." + } + }, + "setUriOf(uint256,string)": { + "details": "Only a project's owner can set its metadata through the project's controller.Frontends typically use an IPFS hash for the metadata content, optionally with the `ipfs://` prefix.", + "params": { + "metadata": "The metadata content to set.", + "projectId": "The ID of the project to set the metadata of." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "totalTokenSupplyWithReservedTokensOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the total token supply of." + }, + "returns": { + "_0": "The current total token supply of the project, including pending reserved tokens that have not been sent to splits yet." + } + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "details": "Only a credit holder or an operator with the `TRANSFER_TOKENS` permission from that holder can transfer those credits.", + "params": { + "amount": "The amount of credits to transfer.", + "holder": "The address to transfer credits from.", + "projectId": "The ID of the project whose credits are being transferred.", + "recipient": "The recipient of the credits." + } + }, + "trustedForwarder()": { + "details": "Returns the address of the trusted forwarder." + }, + "upcomingRulesetOf(uint256)": { + "details": "If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project the ruleset belongs to." + }, + "returns": { + "metadata": "The upcoming ruleset's metadata as a `JBRulesetMetadata` struct.", + "ruleset": "The upcoming ruleset as a `JBRuleset` struct." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "FUND_ACCESS_LIMITS()": { + "notice": "A contract that stores fund access limits for each project." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "RULESETS()": { + "notice": "The contract storing and managing project rulesets." + }, + "SPLITS()": { + "notice": "The contract that stores splits for each project." + }, + "TOKENS()": { + "notice": "The contract that manages token minting and burning." + }, + "burnTokensOf(address,uint256,uint256,string)": { + "notice": "Burns a project's tokens from a specific holder's balance." + }, + "claimTokensFor(address,uint256,uint256,address)": { + "notice": "Redeem credits to claim tokens into a holder's wallet." + }, + "currentRulesetOf(uint256)": { + "notice": "A project's current ruleset along with its metadata." + }, + "deployERC20For(uint256,string,string,bytes32)": { + "notice": "Deploys an ERC-20 token for a project. It will be used when claiming tokens (with credits)." + }, + "getRulesetOf(uint256,uint256)": { + "notice": "A get `JBRuleset` and `JBRulesetMetadata` structs for the specified `rulesetId`." + }, + "latestQueuedRulesetOf(uint256)": { + "notice": "The latest ruleset queued for a project. Returns the ruleset's struct, its current approval status, and its metadata." + }, + "launchProjectFor(address,string,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "notice": "Creates a project. This will mint the project's ERC-721 to the specified owner's account, queue its first ruleset, and set up any splits." + }, + "launchRulesetsFor(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],(address,address[])[],string)": { + "notice": "Creates an initial sequence of one or more rulesets for an existing project." + }, + "migrateController(uint256,address)": { + "notice": "Allows a project to migrate from this controller to another one." + }, + "mintTokensOf(uint256,uint256,address,string,bool)": { + "notice": "Mint new project tokens into an account, optionally reserving a portion according to the current ruleset's reserved rate." + }, + "payReservedTokenToTerminal(address,uint256,address,uint256,address,bytes)": { + "notice": "Pay the reserved rate tokens to a projects terminal." + }, + "pendingReservedTokenBalanceOf(uint256)": { + "notice": "The reserved token balance that has not yet been realized (sent out to the reserved split group) for a project." + }, + "queueRulesetsOf(uint256,(uint256,uint256,uint256,uint256,address,(uint256,uint256,uint256,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address,uint256),(uint256,(bool,uint256,uint256,address,uint256,address)[])[],(address,address,(uint256,uint256)[],(uint256,uint256)[])[])[],string)": { + "notice": "Queues one or more rulesets that will take effect once the current ruleset expires. Rulesets only take effect if they are approved by the previous ruleset's approval hook." + }, + "receiveMigrationFrom(address,uint256)": { + "notice": "Allows other controllers to signal to this one that a migration is expected for the specified project." + }, + "rulesetsOf(uint256,uint256,uint256)": { + "notice": "Get an array of a project's rulesets (with metadata) up to a maximum array size, sorted from latest to earliest." + }, + "sendReservedTokensToSplitsOf(uint256,string)": { + "notice": "Sends a project's pending reserved tokens to its reserved token splits." + }, + "setControllerAllowed(uint256)": { + "notice": "A flag indicating if the project currently allows its controller to be set." + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "notice": "Sets a project's split groups." + }, + "setTerminalsAllowed(uint256)": { + "notice": "A flag indicating if the project currently allows terminals to be set." + }, + "setTokenFor(uint256,address)": { + "notice": "Set a project's token if not already set." + }, + "setUriOf(uint256,string)": { + "notice": "Set a project's metadata URI content." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "totalTokenSupplyWithReservedTokensOf(uint256)": { + "notice": "Gets the current token supply of a project, including pending reserved tokens." + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "notice": "Allows a holder to transfer credits to another account." + }, + "upcomingRulesetOf(uint256)": { + "notice": "A project's upcoming ruleset along with its metadata." + }, + "uriOf(uint256)": { + "notice": "The metadata URI for each project. This is typically an IPFS hash, optionally with the `ipfs://` prefix." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBController.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBDirectory.json b/deployments/nana-core/sepolia/JBDirectory.json new file mode 100644 index 00000000..2bfacff0 --- /dev/null +++ b/deployments/nana-core/sepolia/JBDirectory.json @@ -0,0 +1,955 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBDirectory", + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "controllerOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC165" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "primaryTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setControllerOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "controller", + "type": "address", + "internalType": "contract IERC165" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setIsAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPrimaryTerminalOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "terminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTerminalsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminals", + "type": "address[]", + "internalType": "contract IJBTerminal[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "terminalsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IJBTerminal[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetController", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "controller", + "type": "address", + "indexed": true, + "internalType": "contract IERC165" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetIsAllowedToSetFirstController", + "inputs": [ + { + "name": "addr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "indexed": true, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetPrimaryTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "terminal", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetTerminals", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "terminals", + "type": "address[]", + "indexed": false, + "internalType": "contract IJBTerminal[]" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "DUPLICATE_TERMINALS", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PROJECT_ID_IN_DIRECTORY", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "SET_CONTROLLER_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "SET_TERMINALS_NOT_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_ACCEPTED", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"DUPLICATE_TERMINALS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PROJECT_ID_IN_DIRECTORY\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"SET_CONTROLLER_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"SET_TERMINALS_NOT_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_ACCEPTED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IERC165\",\"name\":\"controller\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetIsAllowedToSetFirstController\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetPrimaryTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"terminals\",\"type\":\"address[]\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetTerminals\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"controllerOf\",\"outputs\":[{\"internalType\":\"contract IERC165\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isAllowedToSetFirstController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTerminalOf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"primaryTerminalOf\",\"outputs\":[{\"internalType\":\"contract IJBTerminal\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC165\",\"name\":\"controller\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setControllerOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setIsAllowedToSetFirstController\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"terminal\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setPrimaryTerminalOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"terminals\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTerminalsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"terminalsOf\",\"outputs\":[{\"internalType\":\"contract IJBTerminal[]\",\"name\":\"\",\"type\":\"address[]\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"owner\":\"The address that will own the contract.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\"}},\"isTerminalOf(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project to check for the terminal.\",\"terminal\":\"The address of the terminal to check for.\"},\"returns\":{\"_0\":\"A flag indicating whether or not the specified terminal is a terminal of the specified project.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"primaryTerminalOf(uint256,address)\":{\"details\":\"The zero address is returned if a terminal isn't found for the specified token.\",\"params\":{\"projectId\":\"The ID of the project to get the primary terminal of.\",\"token\":\"The token the terminal accepts.\"},\"returns\":{\"_0\":\"The address of the primary terminal for the specified project and token.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setControllerOf(uint256,address)\":{\"details\":\"A controller can be set if:- The project's ruleset allows setting the controller, and the message sender is the project owner or an operator with the `SET_CONTROLLER` permission from them.- OR the message sender is the project's current controller.- OR an allowedlisted address is setting a controller for a project that doesn't already have a controller.\",\"params\":{\"controller\":\"The address of the new controller to set for the project.\",\"projectId\":\"The ID of the project to set the controller of.\"}},\"setIsAllowedToSetFirstController(address,bool)\":{\"details\":\"Only this contract's owner can call this function.These addresses are known and vetted controllers as well as contracts designed to launch new projects.A project can set its own controller without being on the allow list.If you would like an address/contract allowlisted, please reach out to the contract owner.\",\"params\":{\"addr\":\"The address to allow or not allow.\",\"flag\":\"Whether the address is allowed or not allowed to set first controllers for projects. Use `true` to allow and `false` to not allow.\"}},\"setPrimaryTerminalOf(uint256,address,address)\":{\"details\":\"The primary terminal is where a token should be routed to by default.This is useful in case a project has several terminals connected for a particular token.If setting a newly added terminal and the ruleset doesn't allow new terminals, the caller must be the current controller.\",\"params\":{\"projectId\":\"The ID of the project a primary token is being set for.\",\"terminal\":\"The terminal to make the primary terminal for the project and token.\",\"token\":\"The token to set the primary terminal for.\"}},\"setTerminalsOf(uint256,address[])\":{\"details\":\"Only a project's owner, an operator with the `SET_TERMINALS` permission from the owner, or the project's controller can set its terminals.Unless the caller is the project's controller, the project's ruleset must allow setting terminals.\",\"params\":{\"projectId\":\"The ID of the project to set terminals for.\",\"terminals\":\"An array of terminal addresses to set for the project.\"}},\"terminalsOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the terminals of.\"},\"returns\":{\"_0\":\"An array of terminal addresses.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"controllerOf(uint256)\":{\"notice\":\"The controller, which dictates how terminals interact with tokens and rulesets, for a given project ID.\"},\"isAllowedToSetFirstController(address)\":{\"notice\":\"Addresses allowed to set a project's first controller on their behalf. These addresses/contracts have been vetted and verified by this contract's owner.\"},\"isTerminalOf(uint256,address)\":{\"notice\":\"Check if a specified project uses a specified terminal.\"},\"primaryTerminalOf(uint256,address)\":{\"notice\":\"The primary terminal that a project is using to manage a specified token.\"},\"setControllerOf(uint256,address)\":{\"notice\":\"Set a project's controller. Controllers manage how terminals interact with tokens and rulesets.\"},\"setIsAllowedToSetFirstController(address,bool)\":{\"notice\":\"Add an address/contract to the list of trusted addresses which are allowed to set a first controller for projects.\"},\"setPrimaryTerminalOf(uint256,address,address)\":{\"notice\":\"Set a project's primary terminal for a particular token.\"},\"setTerminalsOf(uint256,address[])\":{\"notice\":\"Set a project's terminals.\"},\"terminalsOf(uint256)\":{\"notice\":\"For given project ID, the terminals which are currently managing that project's funds.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBDirectory.sol\":\"JBDirectory\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBDirectory.sol\":{\"keccak256\":\"0x164ccdbd7d3d67ff89934609c8e9c0340578bef327f02668483fa909b82d4c74\",\"urls\":[\"bzz-raw://7c17e1f8b916022b3997654834a8167875a8e82279b2a937b8949e36b9ff838e\",\"dweb:/ipfs/QmYbKb1JzK22tEENfaf1pHMx8pGkTowMEfrcYYDDpfvdjC\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A" + ], + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6040516331a9108f60e11b81526004810184905261030b907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "owner": "The address that will own the contract.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers." + } + }, + "isTerminalOf(uint256,address)": { + "params": { + "projectId": "The ID of the project to check for the terminal.", + "terminal": "The address of the terminal to check for." + }, + "returns": { + "_0": "A flag indicating whether or not the specified terminal is a terminal of the specified project." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "primaryTerminalOf(uint256,address)": { + "details": "The zero address is returned if a terminal isn't found for the specified token.", + "params": { + "projectId": "The ID of the project to get the primary terminal of.", + "token": "The token the terminal accepts." + }, + "returns": { + "_0": "The address of the primary terminal for the specified project and token." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "setControllerOf(uint256,address)": { + "details": "A controller can be set if:- The project's ruleset allows setting the controller, and the message sender is the project owner or an operator with the `SET_CONTROLLER` permission from them.- OR the message sender is the project's current controller.- OR an allowedlisted address is setting a controller for a project that doesn't already have a controller.", + "params": { + "controller": "The address of the new controller to set for the project.", + "projectId": "The ID of the project to set the controller of." + } + }, + "setIsAllowedToSetFirstController(address,bool)": { + "details": "Only this contract's owner can call this function.These addresses are known and vetted controllers as well as contracts designed to launch new projects.A project can set its own controller without being on the allow list.If you would like an address/contract allowlisted, please reach out to the contract owner.", + "params": { + "addr": "The address to allow or not allow.", + "flag": "Whether the address is allowed or not allowed to set first controllers for projects. Use `true` to allow and `false` to not allow." + } + }, + "setPrimaryTerminalOf(uint256,address,address)": { + "details": "The primary terminal is where a token should be routed to by default.This is useful in case a project has several terminals connected for a particular token.If setting a newly added terminal and the ruleset doesn't allow new terminals, the caller must be the current controller.", + "params": { + "projectId": "The ID of the project a primary token is being set for.", + "terminal": "The terminal to make the primary terminal for the project and token.", + "token": "The token to set the primary terminal for." + } + }, + "setTerminalsOf(uint256,address[])": { + "details": "Only a project's owner, an operator with the `SET_TERMINALS` permission from the owner, or the project's controller can set its terminals.Unless the caller is the project's controller, the project's ruleset must allow setting terminals.", + "params": { + "projectId": "The ID of the project to set terminals for.", + "terminals": "An array of terminal addresses to set for the project." + } + }, + "terminalsOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the terminals of." + }, + "returns": { + "_0": "An array of terminal addresses." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "controllerOf(uint256)": { + "notice": "The controller, which dictates how terminals interact with tokens and rulesets, for a given project ID." + }, + "isAllowedToSetFirstController(address)": { + "notice": "Addresses allowed to set a project's first controller on their behalf. These addresses/contracts have been vetted and verified by this contract's owner." + }, + "isTerminalOf(uint256,address)": { + "notice": "Check if a specified project uses a specified terminal." + }, + "primaryTerminalOf(uint256,address)": { + "notice": "The primary terminal that a project is using to manage a specified token." + }, + "setControllerOf(uint256,address)": { + "notice": "Set a project's controller. Controllers manage how terminals interact with tokens and rulesets." + }, + "setIsAllowedToSetFirstController(address,bool)": { + "notice": "Add an address/contract to the list of trusted addresses which are allowed to set a first controller for projects." + }, + "setPrimaryTerminalOf(uint256,address,address)": { + "notice": "Set a project's primary terminal for a particular token." + }, + "setTerminalsOf(uint256,address[])": { + "notice": "Set a project's terminals." + }, + "terminalsOf(uint256)": { + "notice": "For given project ID, the terminals which are currently managing that project's funds." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBDirectory.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBFeelessAddresses.json b/deployments/nana-core/sepolia/JBFeelessAddresses.json new file mode 100644 index 00000000..a59d2934 --- /dev/null +++ b/deployments/nana-core/sepolia/JBFeelessAddresses.json @@ -0,0 +1,529 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBFeelessAddresses", + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isFeeless", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setFeelessAddress", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "flag", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetFeelessAddress", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "isFeeless", + "type": "bool", + "indexed": true, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "contractAddress": null, + "cumulativeGasUsed": "16393579", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1014514380", + "gasUsed": "9789398", + "hash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "index": 60, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 67, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x6daf75799cd1798b187fd5ba7fad6ef446eee635c5906fc027f3e7704902c8f0" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 68, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 69, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 70, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 71, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 72, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 73, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 74, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 75, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 76, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 77, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 78, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 79, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 80, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 81, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 82, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 83, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 84, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 85, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 86, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 87, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + } + ], + "logsBloom": "0x00000010080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040800000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000000000000000100800000000200000000000000000000804000000020004000081010000000000000000000020208c00000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"isFeeless\",\"type\":\"bool\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetFeelessAddress\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isFeeless\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setFeelessAddress\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"owner\":\"The address that will own this contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setFeelessAddress(address,bool)\":{\"details\":\"Only the owner of this contract can set addresses as feeless or not feeless.Feeless addresses can receive payouts without incurring a fee.Feeless addresses can use the surplus allowance without incurring a fee.Feeless addresses can be the beneficary of redemptions without incurring a fee.\",\"params\":{\"addr\":\"The address to make feeless or not feeless.\",\"flag\":\"A flag indicating whether the `address` should be made feeless or not feeless.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isFeeless(address)\":{\"notice\":\"Feeless addresses for this terminal.\"},\"setFeelessAddress(address,bool)\":{\"notice\":\"Sets an address as feeless or not feeless for this terminal.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBFeelessAddresses.sol\":\"JBFeelessAddresses\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBFeelessAddresses.sol\":{\"keccak256\":\"0x860d0650289bd755ecd25b7be4b2f0bb7b8432e267da9437bb928322d3c217a7\",\"urls\":[\"bzz-raw://0fa76cec4171ad3dfadb8228773300c41068d1892926a47c0766fa37012ca9db\",\"dweb:/ipfs/QmSEbFm4kmBrVNRBgw6bmhwwPVNQxcm3dYrZhJsaxDEsVN\"],\"license\":\"MIT\"},\"src/interfaces/IJBFeelessAddresses.sol\":{\"keccak256\":\"0xe5df42cfa71c5fa41b905c122de5825df13c2aab2f9cc4cf4bafa331dd69c27e\",\"urls\":[\"bzz-raw://3773bf3b42cc57d1e4086147e52135ff1dbff4309c45ca0398f821dfaa071563\",\"dweb:/ipfs/QmXUEJssHaxYKfV33tMZGf81JTR5a5yxEVshzNus84xLuT\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "owner": "The address that will own this contract." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "setFeelessAddress(address,bool)": { + "details": "Only the owner of this contract can set addresses as feeless or not feeless.Feeless addresses can receive payouts without incurring a fee.Feeless addresses can use the surplus allowance without incurring a fee.Feeless addresses can be the beneficary of redemptions without incurring a fee.", + "params": { + "addr": "The address to make feeless or not feeless.", + "flag": "A flag indicating whether the `address` should be made feeless or not feeless." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "isFeeless(address)": { + "notice": "Feeless addresses for this terminal." + }, + "setFeelessAddress(address,bool)": { + "notice": "Sets an address as feeless or not feeless for this terminal." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBFeelessAddresses.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBFundAccessLimits.json b/deployments/nana-core/sepolia/JBFundAccessLimits.json new file mode 100644 index 00000000..b8d9631e --- /dev/null +++ b/deployments/nana-core/sepolia/JBFundAccessLimits.json @@ -0,0 +1,862 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBFundAccessLimits", + "address": "0x2Fd39295dd948dfBB8Aa7e2508ea5Fc15096682b", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "payoutLimitOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "payoutLimit", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "payoutLimitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setFundAccessLimitsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "fundAccessLimitGroup", + "type": "tuple[]", + "internalType": "struct JBFundAccessLimitGroup[]", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "surplusAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "surplusAllowance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "surplusAllowancesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "SetFundAccessLimits", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "limits", + "type": "tuple", + "indexed": false, + "internalType": "struct JBFundAccessLimitGroup", + "components": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "payoutLimits", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "surplusAllowances", + "type": "tuple[]", + "internalType": "struct JBCurrencyAmount[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PAYOUT_LIMIT_CURRENCY_ORDERING\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE_CURRENCY\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SURPLUS_ALLOWANCE_CURRENCY_ORDERING\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBFundAccessLimitGroup\",\"name\":\"limits\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetFundAccessLimits\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"payoutLimitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"payoutLimit\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"payoutLimitsOf\",\"outputs\":[{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBFundAccessLimitGroup[]\",\"name\":\"fundAccessLimitGroup\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"payoutLimits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setFundAccessLimitsFor\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"surplusAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"surplusAllowance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"surplusAllowancesOf\",\"outputs\":[{\"internalType\":\"struct JBCurrencyAmount[]\",\"name\":\"surplusAllowances\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"payoutLimitOf(uint256,uint256,address,address,uint256)\":{\"details\":\"The fixed point amount returned will have the same number of decimals as the specified terminal.\",\"params\":{\"currency\":\"The currency the payout limit is denominated in.\",\"projectId\":\"The ID of the project to get the payout limit of.\",\"rulesetId\":\"The ID of the ruleset the payout limit applies to.\",\"terminal\":\"The terminal the payout limit applies to.\",\"token\":\"The token the payout limit applies to.\"},\"returns\":{\"payoutLimit\":\"The payout limit, as a fixed point number with the same number of decimals as the provided terminal.\"}},\"payoutLimitsOf(uint256,uint256,address,address)\":{\"details\":\"The fixed point `amount`s of the returned structs will have the same number of decimals as the specified terminal.\",\"params\":{\"projectId\":\"The ID of the project to get the payout limits of.\",\"rulesetId\":\"The ID of the ruleset the payout limits apply to.\",\"terminal\":\"The terminal the payout limits apply to.\",\"token\":\"The token the payout limits apply to.\"},\"returns\":{\"payoutLimits\":\"The payout limits.\"}},\"setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])\":{\"details\":\"Only a project's current controller can set its fund access limits.Payout limits and surplus allowances must be specified in strictly increasing order (by currency) to prevent duplicates.\",\"params\":{\"fundAccessLimitGroup\":\"An array containing payout limits and surplus allowances for each payment terminal. Amounts are fixed point numbers using the same number of decimals as the accompanying terminal.\",\"projectId\":\"The ID of the project whose fund access limits are being set.\",\"rulesetId\":\"The ID of the ruleset that the limits will apply within.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"surplusAllowanceOf(uint256,uint256,address,address,uint256)\":{\"details\":\"The fixed point amount returned will have the same number of decimals as the specified terminal.\",\"params\":{\"currency\":\"The currency that the surplus allowance is denominated in.\",\"projectId\":\"The ID of the project to get the surplus allowance of.\",\"rulesetId\":\"The ID of the ruleset the surplus allowance applies to.\",\"terminal\":\"The terminal the surplus allowance applies to.\",\"token\":\"The token the surplus allowance applies to.\"},\"returns\":{\"surplusAllowance\":\"The surplus allowance, as a fixed point number with the same number of decimals as the provided terminal.\"}},\"surplusAllowancesOf(uint256,uint256,address,address)\":{\"details\":\"The number of decimals in the returned fixed point amount is the same as that of the specified terminal.\",\"params\":{\"projectId\":\"The ID of the project to get the surplus allowances of.\",\"rulesetId\":\"The ID of the ruleset the surplus allowances applies to.\",\"terminal\":\"The terminal the surplus allowances applies to.\",\"token\":\"The token the surplus allowances applies to.\"},\"returns\":{\"surplusAllowances\":\"The surplus allowances.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"payoutLimitOf(uint256,uint256,address,address,uint256)\":{\"notice\":\"A project's payout limit for a specific currency and a given ruleset, terminal, and token.\"},\"payoutLimitsOf(uint256,uint256,address,address)\":{\"notice\":\"A project's payout limits for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from the terminal during the ruleset is dictated by a list of payout limits. Each payout limit is in terms of its own amount and currency.\"},\"setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])\":{\"notice\":\"Sets limits for the amount of funds a project can access from its terminals during a ruleset.\"},\"surplusAllowanceOf(uint256,uint256,address,address,uint256)\":{\"notice\":\"A project's surplus allowance for a specific currency and a given ruleset, terminal, and token.\"},\"surplusAllowancesOf(uint256,uint256,address,address)\":{\"notice\":\"A project's surplus allowances for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from its surplus in a terminal during the ruleset is dictated by a list of surplus allowances. Each surplus allowance is in terms of its own amount and currency.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBFundAccessLimits.sol\":\"JBFundAccessLimits\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBFundAccessLimits.sol\":{\"keccak256\":\"0xf9217afc7b06699040803d425eb288703bd1e5f8e99edd17c8aed2abd6bc6b46\",\"urls\":[\"bzz-raw://e835efc129cb277c436005a73facb8797e3594cf607cfdd823c15449503a61cd\",\"dweb:/ipfs/QmYLKkFk99pGZD89XHvMXhvEk8DecgL6jf53RLnk8HMbQk\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "payoutLimitOf(uint256,uint256,address,address,uint256)": { + "details": "The fixed point amount returned will have the same number of decimals as the specified terminal.", + "params": { + "currency": "The currency the payout limit is denominated in.", + "projectId": "The ID of the project to get the payout limit of.", + "rulesetId": "The ID of the ruleset the payout limit applies to.", + "terminal": "The terminal the payout limit applies to.", + "token": "The token the payout limit applies to." + }, + "returns": { + "payoutLimit": "The payout limit, as a fixed point number with the same number of decimals as the provided terminal." + } + }, + "payoutLimitsOf(uint256,uint256,address,address)": { + "details": "The fixed point `amount`s of the returned structs will have the same number of decimals as the specified terminal.", + "params": { + "projectId": "The ID of the project to get the payout limits of.", + "rulesetId": "The ID of the ruleset the payout limits apply to.", + "terminal": "The terminal the payout limits apply to.", + "token": "The token the payout limits apply to." + }, + "returns": { + "payoutLimits": "The payout limits." + } + }, + "setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])": { + "details": "Only a project's current controller can set its fund access limits.Payout limits and surplus allowances must be specified in strictly increasing order (by currency) to prevent duplicates.", + "params": { + "fundAccessLimitGroup": "An array containing payout limits and surplus allowances for each payment terminal. Amounts are fixed point numbers using the same number of decimals as the accompanying terminal.", + "projectId": "The ID of the project whose fund access limits are being set.", + "rulesetId": "The ID of the ruleset that the limits will apply within." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "surplusAllowanceOf(uint256,uint256,address,address,uint256)": { + "details": "The fixed point amount returned will have the same number of decimals as the specified terminal.", + "params": { + "currency": "The currency that the surplus allowance is denominated in.", + "projectId": "The ID of the project to get the surplus allowance of.", + "rulesetId": "The ID of the ruleset the surplus allowance applies to.", + "terminal": "The terminal the surplus allowance applies to.", + "token": "The token the surplus allowance applies to." + }, + "returns": { + "surplusAllowance": "The surplus allowance, as a fixed point number with the same number of decimals as the provided terminal." + } + }, + "surplusAllowancesOf(uint256,uint256,address,address)": { + "details": "The number of decimals in the returned fixed point amount is the same as that of the specified terminal.", + "params": { + "projectId": "The ID of the project to get the surplus allowances of.", + "rulesetId": "The ID of the ruleset the surplus allowances applies to.", + "terminal": "The terminal the surplus allowances applies to.", + "token": "The token the surplus allowances applies to." + }, + "returns": { + "surplusAllowances": "The surplus allowances." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "payoutLimitOf(uint256,uint256,address,address,uint256)": { + "notice": "A project's payout limit for a specific currency and a given ruleset, terminal, and token." + }, + "payoutLimitsOf(uint256,uint256,address,address)": { + "notice": "A project's payout limits for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from the terminal during the ruleset is dictated by a list of payout limits. Each payout limit is in terms of its own amount and currency." + }, + "setFundAccessLimitsFor(uint256,uint256,(address,address,(uint256,uint256)[],(uint256,uint256)[])[])": { + "notice": "Sets limits for the amount of funds a project can access from its terminals during a ruleset." + }, + "surplusAllowanceOf(uint256,uint256,address,address,uint256)": { + "notice": "A project's surplus allowance for a specific currency and a given ruleset, terminal, and token." + }, + "surplusAllowancesOf(uint256,uint256,address,address)": { + "notice": "A project's surplus allowances for a given ruleset, terminal, and token.The total value of `token`s that a project can pay out from its surplus in a terminal during the ruleset is dictated by a list of surplus allowances. Each surplus allowance is in terms of its own amount and currency." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBFundAccessLimits.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBMultiTerminal.json b/deployments/nana-core/sepolia/JBMultiTerminal.json new file mode 100644 index 00000000..4f5a9a9c --- /dev/null +++ b/deployments/nana-core/sepolia/JBMultiTerminal.json @@ -0,0 +1,2183 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBMultiTerminal", + "address": "0x12bB7Bcc941b2E5cCef740d0e4317a5B35717D30", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "splits", + "type": "address", + "internalType": "contract IJBSplits" + }, + { + "name": "store", + "type": "address", + "internalType": "contract IJBTerminalStore" + }, + { + "name": "feelessAddresses", + "type": "address", + "internalType": "contract IJBFeelessAddresses" + }, + { + "name": "permit2", + "type": "address", + "internalType": "contract IPermit2" + }, + { + "name": "trustedForwarder", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FEE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FEELESS_ADDRESSES", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBFeelessAddresses" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMIT2", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPermit2" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SPLITS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBSplits" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STORE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTerminalStore" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accountingContextForTokenOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accountingContextsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addAccountingContextsFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokens", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addToBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "shouldReturnHeldFees", + "type": "bool", + "internalType": "bool" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "currentSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "executePayout", + "inputs": [ + { + "name": "split", + "type": "tuple", + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "originalMessageSender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "netPayoutAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeProcessFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "feeTerminal", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "heldFeesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct JBFee[]", + "components": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "unlockTimestamp", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTrustedForwarder", + "inputs": [ + { + "name": "forwarder", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "migrateBalanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "contract IJBTerminal" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pay", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "minReturnedTokens", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "processHeldFeesOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redeemTokensOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenToReclaim", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensReclaimed", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "reclaimAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "sendPayoutsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "trustedForwarder", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "useAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minTokensPaidOut", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "memo", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddToBalance", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "unlockedFees", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FeeReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "feeProjectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HoldFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HookAfterRecordPay", + "inputs": [ + { + "name": "hook", + "type": "address", + "indexed": true, + "internalType": "contract IJBPayHook" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAfterPayRecordedContext", + "components": [ + { + "name": "payer", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "forwardedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectTokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "hookMetadata", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "payerMetadata", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "specificationAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HookAfterRecordRedeem", + "inputs": [ + { + "name": "hook", + "type": "address", + "indexed": true, + "internalType": "contract IJBRedeemHook" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAfterRedeemRecordedContext", + "components": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reclaimedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "forwardedAmount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "hookMetadata", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "redeemerMetadata", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "specificationAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateTerminal", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "contract IJBTerminal" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Pay", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "payer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryTokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PayoutReverted", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProcessFee", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "wasHeld", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RedeemTokens", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "holder", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "tokenCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reclaimedAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReturnHeldFees", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "returnedFees", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "leftoverAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendPayoutToSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "netAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SendPayouts", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiaryDistributionAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetAccountingContext", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "context", + "type": "tuple", + "indexed": false, + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UseAllowance", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "netAmountPaidOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "memo", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ACCOUNTING_CONTEXT_ALREADY_SET", + "inputs": [] + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "AddressInsufficientBalance", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "FailedInnerCall", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_PAYOUT_AMOUNT", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_RECLAIM_AMOUNT", + "inputs": [] + }, + { + "type": "error", + "name": "NO_MSG_VALUE_ALLOWED", + "inputs": [] + }, + { + "type": "error", + "name": "OVERFLOW_ALERT", + "inputs": [] + }, + { + "type": "error", + "name": "PERMIT_ALLOWANCE_NOT_ENOUGH", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "SafeERC20FailedOperation", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TERMINAL_TOKENS_INCOMPATIBLE", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_ACCEPTED", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "UNDER_MIN_RETURNED_TOKENS", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "contractAddress": null, + "cumulativeGasUsed": "13449016", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1016535536", + "gasUsed": "5665361", + "hash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "index": 30, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 50, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xbd83227458e7b001798ea38dba5a3ff8517c4b6f214670649c3d33c7402cd2ad" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x00000000000000000000000012bb7bcc941b2e5ccef740d0e4317a5b35717d30", + "index": 51, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x", + "index": 52, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x000000000000000000000000000000000000000000000000000000000000000f", + "index": 53, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x", + "index": 54, + "topics": [ + "0x4383d976757d67ca920616be0b6430a681ea9d3dcce8d6d61d4603ca4a9bff63", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + } + ], + "logsBloom": "0x00000000080010000008000000080000000000000008000000000800004000040040008000000000000000000040000000000000000000000000000000000000000000000000200400000008020000010000000020000000000000000000000000000000000000000000000000000000000000100020000000000008000000000001000000000000000100000000000000000000000000000000804000000000004000800010000000000000000000020200000000000000000000000006000000000000000000200000000008000000000000000000000000000000000000000000000000000008000000000000000200000000000000000000000008000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBSplits\",\"name\":\"splits\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminalStore\",\"name\":\"store\",\"type\":\"address\"},{\"internalType\":\"contract IJBFeelessAddresses\",\"name\":\"feelessAddresses\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ACCOUNTING_CONTEXT_ALREADY_SET\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressEmptyCode\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"AddressInsufficientBalance\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"FailedInnerCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_PAYOUT_AMOUNT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_RECLAIM_AMOUNT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"NO_MSG_VALUE_ALLOWED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OVERFLOW_ALERT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PERMIT_ALLOWANCE_NOT_ENOUGH\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TERMINAL_TOKENS_INCOMPATIBLE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_ACCEPTED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNDER_MIN_RETURNED_TOKENS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"unlockedFees\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddToBalance\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"feeProjectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"FeeReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HoldFee\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBPayHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAfterPayRecordedContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"amount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"forwardedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"hookMetadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"payerMetadata\",\"type\":\"bytes\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"specificationAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HookAfterRecordPay\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBRedeemHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAfterRedeemRecordedContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"reclaimedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"forwardedAmount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"hookMetadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"redeemerMetadata\",\"type\":\"bytes\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"specificationAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"HookAfterRecordRedeem\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"contract IJBTerminal\",\"name\":\"to\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"MigrateTerminal\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Pay\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"PayoutReverted\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"wasHeld\",\"type\":\"bool\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ProcessFee\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"reclaimedAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"RedeemTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"returnedFees\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"leftoverAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ReturnHeldFees\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"netAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendPayoutToSplit\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"beneficiaryDistributionAmount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SendPayouts\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"context\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetAccountingContext\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"netAmountPaidOut\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"UseAllowance\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FEELESS_ADDRESSES\",\"outputs\":[{\"internalType\":\"contract IJBFeelessAddresses\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMIT2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"SPLITS\",\"outputs\":[{\"internalType\":\"contract IJBSplits\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"STORE\",\"outputs\":[{\"internalType\":\"contract IJBTerminalStore\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"accountingContextForTokenOf\",\"outputs\":[{\"internalType\":\"struct JBAccountingContext\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"accountingContextsOf\",\"outputs\":[{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"addAccountingContextsFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"shouldReturnHeldFees\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"addToBalanceOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalMessageSender\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executePayout\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"netPayoutAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"feeTerminal\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"executeProcessFee\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"heldFeesOf\",\"outputs\":[{\"internalType\":\"struct JBFee[]\",\"name\":\"\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"contract IJBTerminal\",\"name\":\"to\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"migrateBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minReturnedTokens\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\",\"name\":\"pay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"beneficiaryTokenCount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"processHeldFeesOf\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenToReclaim\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensReclaimed\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"redeemTokensOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reclaimAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensPaidOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"sendPayoutsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokensPaidOut\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"useAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountingContextForTokenOf(uint256,address)\":{\"details\":\"See the `JBAccountingContext` struct for more information.\",\"params\":{\"projectId\":\"The ID of the project to get token accounting context of.\",\"token\":\"The token to check the accounting context of.\"},\"returns\":{\"_0\":\"The token's accounting context for the token.\"}},\"accountingContextsOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the accepted tokens of.\"},\"returns\":{\"_0\":\"tokenContexts The accounting contexts of the accepted tokens.\"}},\"addAccountingContextsFor(uint256,address[])\":{\"details\":\"Only a project's owner, an operator with the `SET_ACCOUNTING_CONTEXT` permission from that owner, or a project's controller can add accounting contexts for the project.\",\"params\":{\"projectId\":\"The ID of the project having to add accounting contexts for.\",\"tokens\":\"The tokens to add accounting contexts for.\"}},\"addToBalanceOf(uint256,address,uint256,bool,string,bytes)\":{\"details\":\"Adding to balance can unlock held fees if `shouldUnlockHeldFees` is true.\",\"params\":{\"amount\":\"The amount of tokens to add to the balance, as a fixed point number with the same number of decimals as this terminal. If this is a native token terminal, this is ignored and `msg.value` is used instead.\",\"memo\":\"A memo to pass along to the emitted event.\",\"metadata\":\"Extra data to pass along to the emitted event.\",\"projectId\":\"The ID of the project to add funds to the balance of.\",\"shouldReturnHeldFees\":\"A flag indicating if held fees should be returned based on the amount being added.\",\"token\":\"The token being added to the balance.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"feelessAddresses\":\"A contract that stores addresses that shouldn't incur fees when being paid towards or from.\",\"permissions\":\"A contract storing permissions.\",\"permit2\":\"A permit2 utility.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\",\"splits\":\"A contract that stores splits for each project.\",\"store\":\"A contract that stores the terminal's data.\"}},\"currentSurplusOf(uint256,uint256,uint256)\":{\"details\":\"This total surplus only includes tokens that the project accepts (as returned by `accountingContextsOf(...)`).\",\"params\":{\"currency\":\"The currency to express the returned value in terms of.\",\"decimals\":\"The number of decimals to include in the fixed point returned value.\",\"projectId\":\"The ID of the project to get the current total surplus of.\"},\"returns\":{\"_0\":\"The current surplus amount the project has in this terminal, in terms of `currency` and with the specified number of decimals.\"}},\"executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)\":{\"details\":\"Only accepts calls from this terminal itself.\",\"params\":{\"amount\":\"The total amount being paid to the split, as a fixed point number with the same number of decimals as this terminal.\",\"projectId\":\"The ID of the project the split belongs to.\",\"split\":\"The split to pay.\",\"token\":\"The address of the token being paid to the split.\"},\"returns\":{\"netPayoutAmount\":\"The amount sent to the split after subtracting fees.\"}},\"executeProcessFee(uint256,address,uint256,address,address)\":{\"details\":\"Only accepts calls from this terminal itself.\",\"params\":{\"amount\":\"The fee amount, as a fixed point number with 18 decimals.\",\"beneficiary\":\"The address to mint tokens to (from the project which receives fees), and pass along to the ruleset's data hook and pay hook if applicable.\",\"feeTerminal\":\"The terminal that'll receive the fees.\",\"projectId\":\"The ID of the project paying the fee.\",\"token\":\"The token the fee is being paid in.\"}},\"heldFeesOf(uint256,address)\":{\"details\":\"Projects can temporarily hold fees and unlock them later by adding funds to the project's balance.Held fees can be processed at any time by this terminal's owner.\",\"params\":{\"projectId\":\"The ID of the project that is holding fees.\",\"token\":\"The token that the fees are held in.\"}},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"migrateBalanceOf(uint256,address,address)\":{\"details\":\"Only a project's owner or an operator with the `MIGRATE_TERMINAL` permission from that owner can migrate the project's terminal.\",\"params\":{\"projectId\":\"The ID of the project being migrated.\",\"to\":\"The terminal contract being migrated to, which will receive the project's funds and operations.\",\"token\":\"The address of the token being migrated.\"},\"returns\":{\"balance\":\"The amount of funds that were migrated, as a fixed point number with the same amount of decimals as this terminal.\"}},\"pay(uint256,address,uint256,address,uint256,string,bytes)\":{\"params\":{\"amount\":\"The amount of terminal tokens being received, as a fixed point number with the same number of decimals as this terminal. If this terminal's token is native, this is ignored and `msg.value` is used in its place.\",\"beneficiary\":\"The address to mint tokens to, and pass along to the ruleset's data hook and pay hook if applicable.\",\"memo\":\"A memo to pass along to the emitted event.\",\"metadata\":\"Bytes to pass along to the emitted event, as well as the data hook and pay hook if applicable.\",\"minReturnedTokens\":\"The minimum number of project tokens expected in return for this payment, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the payment is reverted.\",\"projectId\":\"The ID of the project being paid.\",\"token\":\"The token being paid.\"},\"returns\":{\"beneficiaryTokenCount\":\"The number of tokens minted to the beneficiary, as a fixed point number with 18 decimals.\"}},\"processHeldFeesOf(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project to process held fees for.\",\"token\":\"The token to process held fees for.\"}},\"redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)\":{\"details\":\"Only a token's holder or an operator with the `REDEEM_TOKENS` permission from that holder can redeem those tokens.\",\"params\":{\"beneficiary\":\"The address to send the reclaimed terminal tokens to, and to pass along to the ruleset's data hook and redeem hook if applicable.\",\"holder\":\"The account whose tokens are being redeemed.\",\"metadata\":\"Bytes to send along to the emitted event, as well as the data hook and redeem hook if applicable.\",\"minTokensReclaimed\":\"The minimum number of terminal tokens expected in return, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the redemption is reverted.\",\"projectId\":\"The ID of the project the project tokens belong to.\",\"redeemCount\":\"The number of project tokens to redeem, as a fixed point number with 18 decimals.\",\"tokenToReclaim\":\"The token being reclaimed.\"},\"returns\":{\"reclaimAmount\":\"The amount of terminal tokens that the project tokens were redeemed for, as a fixed point number with 18 decimals.\"}},\"sendPayoutsOf(uint256,address,uint256,uint256,uint256)\":{\"details\":\"If the percentages of the splits in the project's payout split group do not add up to 100%, the remainder is sent to the project's owner.Anyone can send payouts on a project's behalf. Projects can include a wildcard split (a split with no `hook`, `projectId`, or `beneficiary`) to send funds to the `_msgSender()` which calls this function. This can be used to incentivize calling this function.payouts sent to addresses which aren't feeless incur the protocol fee.Payouts a projects don't incur fees if its terminal is feeless.\",\"params\":{\"amount\":\"The total number of terminal tokens to send, as a fixed point number with same number of decimals as this terminal.\",\"currency\":\"The expected currency of the payouts being sent. Must match the currency of one of the project's current ruleset's payout limits.\",\"minTokensPaidOut\":\"The minimum number of terminal tokens that the `amount` should be worth (if expressed in terms of this terminal's currency), as a fixed point number with the same number of decimals as this terminal. If the amount of tokens paid out would be less than this amount, the send is reverted.\",\"projectId\":\"The ID of the project having its payouts sent.\",\"token\":\"The token being sent.\"},\"returns\":{\"amountPaidOut\":\"The total amount paid out.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)\":{\"details\":\"Only a project's owner or an operator with the `USE_ALLOWANCE` permission from that owner can use the surplus allowance.Incurs the protocol fee unless the caller is a feeless address.\",\"params\":{\"amount\":\"The amount of terminal tokens to use from the project's current surplus allowance, as a fixed point number with the same amount of decimals as this terminal.\",\"beneficiary\":\"The address to send the surplus funds to.\",\"currency\":\"The expected currency of the amount being paid out. Must match the currency of one of the project's current ruleset's surplus allowances.\",\"memo\":\"A memo to pass along to the emitted event.\",\"minTokensPaidOut\":\"The minimum number of terminal tokens that should be used from the surplus allowance (including fees), as a fixed point number with 18 decimals. If the amount of surplus used would be less than this amount, the transaction is reverted.\",\"projectId\":\"The ID of the project to use the surplus allowance of.\",\"token\":\"The token being paid out from the surplus.\"},\"returns\":{\"amountPaidOut\":\"The number of tokens that were sent to the beneficiary, as a fixed point number with the same amount of decimals as the terminal.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for PROJECTS.\"},\"FEE()\":{\"notice\":\"The fee percent (out of `JBConstants.MAX_FEE`).\"},\"FEELESS_ADDRESSES()\":{\"notice\":\"The contract that stores addresses that shouldn't incur fees when being paid towards or from.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PERMIT2()\":{\"notice\":\"The permit2 utility.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"SPLITS()\":{\"notice\":\"The contract that stores splits for each project.\"},\"STORE()\":{\"notice\":\"The contract that stores and manages the terminal's data.\"},\"accountingContextForTokenOf(uint256,address)\":{\"notice\":\"A project's accounting context for a token.\"},\"accountingContextsOf(uint256)\":{\"notice\":\"The tokens accepted by a project.\"},\"addAccountingContextsFor(uint256,address[])\":{\"notice\":\"Adds accounting contexts for a project to this terminal so the project can begin accepting the tokens in those contexts.\"},\"addToBalanceOf(uint256,address,uint256,bool,string,bytes)\":{\"notice\":\"Adds funds to a project's balance without minting tokens.\"},\"currentSurplusOf(uint256,uint256,uint256)\":{\"notice\":\"Gets the total current surplus amount in this terminal for a project, in terms of a given currency.\"},\"executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)\":{\"notice\":\"Executes a payout to a split.\"},\"executeProcessFee(uint256,address,uint256,address,address)\":{\"notice\":\"Process a specified amount of fees for a project.\"},\"heldFeesOf(uint256,address)\":{\"notice\":\"Fees that are being held for a project.\"},\"migrateBalanceOf(uint256,address,address)\":{\"notice\":\"Migrate a project's funds and operations to a new terminal that accepts the same token type.\"},\"pay(uint256,address,uint256,address,uint256,string,bytes)\":{\"notice\":\"Pay a project with tokens.\"},\"processHeldFeesOf(uint256,address)\":{\"notice\":\"Process any fees that are being held for the project.\"},\"redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)\":{\"notice\":\"Holders can redeem a project's tokens to reclaim some of that project's surplus tokens, or to trigger rules determined by the current ruleset's data hook and redeem hook.\"},\"sendPayoutsOf(uint256,address,uint256,uint256,uint256)\":{\"notice\":\"Sends payouts to a project's current payout split group, according to its ruleset, up to its current payout limit.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)\":{\"notice\":\"Allows a project to pay out funds from its surplus up to the current surplus allowance.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBMultiTerminal.sol\":\"JBMultiTerminal\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xac3d50e321a48a40b4496970ce725900f13aeb2255b7c1203f5adbe98c4a911a\",\"urls\":[\"bzz-raw://1d7b235b578347dce2d831a76f122e820a7db7e73fd2e47f13bafdcd61c5b066\",\"dweb:/ipfs/QmVAELwambfJa55HfiCoz1kFFh7iYwRYeW5x8si6AFM4iX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"],\"license\":\"MIT\"},\"node_modules/@uniswap/permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"],\"license\":\"MIT\"},\"src/JBMultiTerminal.sol\":{\"keccak256\":\"0xaff1c40be20d39feb7f88fd47571592f19577cf20bd6266d6cd772bc4c4b4192\",\"urls\":[\"bzz-raw://b66818b95b17dd216fbba3bff3a31aea18802fb4203541eed097588530ffcb22\",\"dweb:/ipfs/QmcpXKqXQN8xT5BhTAqAec8hTqVkMehf2mJRuPMpdiamce\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFeelessAddresses.sol\":{\"keccak256\":\"0xe5df42cfa71c5fa41b905c122de5825df13c2aab2f9cc4cf4bafa331dd69c27e\",\"urls\":[\"bzz-raw://3773bf3b42cc57d1e4086147e52135ff1dbff4309c45ca0398f821dfaa071563\",\"dweb:/ipfs/QmXUEJssHaxYKfV33tMZGf81JTR5a5yxEVshzNus84xLuT\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTerminalStore.sol\":{\"keccak256\":\"0x81d5eb6c877f535143d26d2bef7be97dabf95122db4b1c6fdd0adc32ddc704ca\",\"urls\":[\"bzz-raw://551ab223b3498a20ae7e2bb3da7169ffa2c0a9ab3bd22c7387b19d69915809a4\",\"dweb:/ipfs/Qma2n7QtVAHmB7pWQavQnSBCouAfh171KezhYbNNmdT3wH\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBFeeTerminal.sol\":{\"keccak256\":\"0x9bda3d88d71167aa04a6184885341a70336f524ec13e3a06eb6a2c66acd816dc\",\"urls\":[\"bzz-raw://b06a3485c0b3ec2e66b3443263967d73164caf25f7d340f8bea229a700d505ef\",\"dweb:/ipfs/QmRPFfGZs5z1dNKjUixx6sEUavtVNuv9b3XVV45VPP2NHc\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBMultiTerminal.sol\":{\"keccak256\":\"0x9151efa71b127bc60aecfcf71264176e1af35cc7d6e27bdf585df5ef8b1fc687\",\"urls\":[\"bzz-raw://7a5143dbc5e547cf41969787ff7ba20552d33789938dcad7423565891ed55f4f\",\"dweb:/ipfs/QmTJNLgywfnNVLYQygkcZT3uEPKUpqXuRyYuc2Cs38tm6d\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBPayoutTerminal.sol\":{\"keccak256\":\"0x69b290ddc214def38e69711ff2cfdf1c571d33653b25520efd98469f6b49c7fa\",\"urls\":[\"bzz-raw://93703189aa74008878f20d2917e14bc6c1572ebd05a5f1e4e28bf255603d86af\",\"dweb:/ipfs/QmTpopL7jfS3GJNgTjTBcSaFcdGGuynQPwuMZR6UjJXJjh\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBPermitTerminal.sol\":{\"keccak256\":\"0x9efd208aad91b74041850bfeef658b0cb64e756bf00cb811ea758fb6da0d1e76\",\"urls\":[\"bzz-raw://16160e253dfd77c4c00b56b34349519a60def039319ac4a6ae977e0fd409ad14\",\"dweb:/ipfs/QmQhjX4HzeMT1x9JixjpmusxBYiDxr9oh8ySj4fLwjnJoK\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBRedeemTerminal.sol\":{\"keccak256\":\"0xf43f5c6fb4d2de1b547ecfbf662f48c5cbd7d0bf79c4b784e566cb4b71ad7da7\",\"urls\":[\"bzz-raw://0ded83cc745fab54a035614b845a984933a57056ee27adbd60f5896f47015270\",\"dweb:/ipfs/QmWH19MehMdwgnprq6M3JmZVCaLQSd25ZPwhA5tap2PEKL\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBFees.sol\":{\"keccak256\":\"0xa5e36ac6f9da8edd37e0b8bf9e9a8ed3f30a4c87ae863a18cf202adf464d0cd1\",\"urls\":[\"bzz-raw://e2e7730f815932064322989b29352062b54ad5f3086a66fdd57d8842bfd60ac1\",\"dweb:/ipfs/QmbxvkJA2cKYy1UADJBrowRvaBSAAG46XGnQv6wuy4cmZW\"],\"license\":\"MIT\"},\"src/libraries/JBMetadataResolver.sol\":{\"keccak256\":\"0xdbe40563934ac1618c9ba15f92d3efc47383534b5b8889bf5aae092927be9e87\",\"urls\":[\"bzz-raw://630534d226e7b1f86907f48c70b0d5593ad5682936330fe2737082e4383e8a56\",\"dweb:/ipfs/QmfTVQ6M3eVYBJRZH3693Axo7yBoR5mr2YvHHwx6nvJojZ\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFee.sol\":{\"keccak256\":\"0x90531b42853517d6e1d1955966ee6ffef38db901cb96770cfcbb6955f760aab0\",\"urls\":[\"bzz-raw://0fc1971f6fba2ec6092544d3eeea0121a078d9c7967a006029d1ef9d87bda805\",\"dweb:/ipfs/QmYyhRHKGCbSETczF848BHJfqMMGTQw5TeFeTu2nbbHX33\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSingleAllowanceContext.sol\":{\"keccak256\":\"0x5bcd5b3abafe9137ee451b112fcac473b4d48858544279d38d0c56dea5271f44\",\"urls\":[\"bzz-raw://5f17a870c2f1797a18918ab3dc6f404f0224d9e415815c708654a17686cd62c0\",\"dweb:/ipfs/QmWMDffMMrj7ZXquTHSQt8VQm5owo94BdPpJ93NfSp2jrn\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "0xa0D811360b0d49be8d33309D6eAE03D072E30312", + "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "0xB2b5841DBeF766d4b521221732F9B618fCf34A87" + ], + "bytecode": "0x6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033", + "deployedBytecode": "0x6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da581565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031281565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc84181565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba381565b34801561047157600080fd5b507f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a876101d4565b3480156104a457600080fd5b506101d47f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8411663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da90911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8419091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303126001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba316906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba36001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8411663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303121691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e303129091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a8716148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da90911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc8416001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da516906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e3031216906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "accountingContextForTokenOf(uint256,address)": { + "details": "See the `JBAccountingContext` struct for more information.", + "params": { + "projectId": "The ID of the project to get token accounting context of.", + "token": "The token to check the accounting context of." + }, + "returns": { + "_0": "The token's accounting context for the token." + } + }, + "accountingContextsOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the accepted tokens of." + }, + "returns": { + "_0": "tokenContexts The accounting contexts of the accepted tokens." + } + }, + "addAccountingContextsFor(uint256,address[])": { + "details": "Only a project's owner, an operator with the `SET_ACCOUNTING_CONTEXT` permission from that owner, or a project's controller can add accounting contexts for the project.", + "params": { + "projectId": "The ID of the project having to add accounting contexts for.", + "tokens": "The tokens to add accounting contexts for." + } + }, + "addToBalanceOf(uint256,address,uint256,bool,string,bytes)": { + "details": "Adding to balance can unlock held fees if `shouldUnlockHeldFees` is true.", + "params": { + "amount": "The amount of tokens to add to the balance, as a fixed point number with the same number of decimals as this terminal. If this is a native token terminal, this is ignored and `msg.value` is used instead.", + "memo": "A memo to pass along to the emitted event.", + "metadata": "Extra data to pass along to the emitted event.", + "projectId": "The ID of the project to add funds to the balance of.", + "shouldReturnHeldFees": "A flag indicating if held fees should be returned based on the amount being added.", + "token": "The token being added to the balance." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "feelessAddresses": "A contract that stores addresses that shouldn't incur fees when being paid towards or from.", + "permissions": "A contract storing permissions.", + "permit2": "A permit2 utility.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers.", + "splits": "A contract that stores splits for each project.", + "store": "A contract that stores the terminal's data." + } + }, + "currentSurplusOf(uint256,uint256,uint256)": { + "details": "This total surplus only includes tokens that the project accepts (as returned by `accountingContextsOf(...)`).", + "params": { + "currency": "The currency to express the returned value in terms of.", + "decimals": "The number of decimals to include in the fixed point returned value.", + "projectId": "The ID of the project to get the current total surplus of." + }, + "returns": { + "_0": "The current surplus amount the project has in this terminal, in terms of `currency` and with the specified number of decimals." + } + }, + "executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)": { + "details": "Only accepts calls from this terminal itself.", + "params": { + "amount": "The total amount being paid to the split, as a fixed point number with the same number of decimals as this terminal.", + "projectId": "The ID of the project the split belongs to.", + "split": "The split to pay.", + "token": "The address of the token being paid to the split." + }, + "returns": { + "netPayoutAmount": "The amount sent to the split after subtracting fees." + } + }, + "executeProcessFee(uint256,address,uint256,address,address)": { + "details": "Only accepts calls from this terminal itself.", + "params": { + "amount": "The fee amount, as a fixed point number with 18 decimals.", + "beneficiary": "The address to mint tokens to (from the project which receives fees), and pass along to the ruleset's data hook and pay hook if applicable.", + "feeTerminal": "The terminal that'll receive the fees.", + "projectId": "The ID of the project paying the fee.", + "token": "The token the fee is being paid in." + } + }, + "heldFeesOf(uint256,address)": { + "details": "Projects can temporarily hold fees and unlock them later by adding funds to the project's balance.Held fees can be processed at any time by this terminal's owner.", + "params": { + "projectId": "The ID of the project that is holding fees.", + "token": "The token that the fees are held in." + } + }, + "isTrustedForwarder(address)": { + "details": "Indicates whether any particular address is the trusted forwarder." + }, + "migrateBalanceOf(uint256,address,address)": { + "details": "Only a project's owner or an operator with the `MIGRATE_TERMINAL` permission from that owner can migrate the project's terminal.", + "params": { + "projectId": "The ID of the project being migrated.", + "to": "The terminal contract being migrated to, which will receive the project's funds and operations.", + "token": "The address of the token being migrated." + }, + "returns": { + "balance": "The amount of funds that were migrated, as a fixed point number with the same amount of decimals as this terminal." + } + }, + "pay(uint256,address,uint256,address,uint256,string,bytes)": { + "params": { + "amount": "The amount of terminal tokens being received, as a fixed point number with the same number of decimals as this terminal. If this terminal's token is native, this is ignored and `msg.value` is used in its place.", + "beneficiary": "The address to mint tokens to, and pass along to the ruleset's data hook and pay hook if applicable.", + "memo": "A memo to pass along to the emitted event.", + "metadata": "Bytes to pass along to the emitted event, as well as the data hook and pay hook if applicable.", + "minReturnedTokens": "The minimum number of project tokens expected in return for this payment, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the payment is reverted.", + "projectId": "The ID of the project being paid.", + "token": "The token being paid." + }, + "returns": { + "beneficiaryTokenCount": "The number of tokens minted to the beneficiary, as a fixed point number with 18 decimals." + } + }, + "processHeldFeesOf(uint256,address)": { + "params": { + "projectId": "The ID of the project to process held fees for.", + "token": "The token to process held fees for." + } + }, + "redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)": { + "details": "Only a token's holder or an operator with the `REDEEM_TOKENS` permission from that holder can redeem those tokens.", + "params": { + "beneficiary": "The address to send the reclaimed terminal tokens to, and to pass along to the ruleset's data hook and redeem hook if applicable.", + "holder": "The account whose tokens are being redeemed.", + "metadata": "Bytes to send along to the emitted event, as well as the data hook and redeem hook if applicable.", + "minTokensReclaimed": "The minimum number of terminal tokens expected in return, as a fixed point number with the same number of decimals as this terminal. If the amount of tokens minted for the beneficiary would be less than this amount, the redemption is reverted.", + "projectId": "The ID of the project the project tokens belong to.", + "redeemCount": "The number of project tokens to redeem, as a fixed point number with 18 decimals.", + "tokenToReclaim": "The token being reclaimed." + }, + "returns": { + "reclaimAmount": "The amount of terminal tokens that the project tokens were redeemed for, as a fixed point number with 18 decimals." + } + }, + "sendPayoutsOf(uint256,address,uint256,uint256,uint256)": { + "details": "If the percentages of the splits in the project's payout split group do not add up to 100%, the remainder is sent to the project's owner.Anyone can send payouts on a project's behalf. Projects can include a wildcard split (a split with no `hook`, `projectId`, or `beneficiary`) to send funds to the `_msgSender()` which calls this function. This can be used to incentivize calling this function.payouts sent to addresses which aren't feeless incur the protocol fee.Payouts a projects don't incur fees if its terminal is feeless.", + "params": { + "amount": "The total number of terminal tokens to send, as a fixed point number with same number of decimals as this terminal.", + "currency": "The expected currency of the payouts being sent. Must match the currency of one of the project's current ruleset's payout limits.", + "minTokensPaidOut": "The minimum number of terminal tokens that the `amount` should be worth (if expressed in terms of this terminal's currency), as a fixed point number with the same number of decimals as this terminal. If the amount of tokens paid out would be less than this amount, the send is reverted.", + "projectId": "The ID of the project having its payouts sent.", + "token": "The token being sent." + }, + "returns": { + "amountPaidOut": "The total amount paid out." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "trustedForwarder()": { + "details": "Returns the address of the trusted forwarder." + }, + "useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)": { + "details": "Only a project's owner or an operator with the `USE_ALLOWANCE` permission from that owner can use the surplus allowance.Incurs the protocol fee unless the caller is a feeless address.", + "params": { + "amount": "The amount of terminal tokens to use from the project's current surplus allowance, as a fixed point number with the same amount of decimals as this terminal.", + "beneficiary": "The address to send the surplus funds to.", + "currency": "The expected currency of the amount being paid out. Must match the currency of one of the project's current ruleset's surplus allowances.", + "memo": "A memo to pass along to the emitted event.", + "minTokensPaidOut": "The minimum number of terminal tokens that should be used from the surplus allowance (including fees), as a fixed point number with 18 decimals. If the amount of surplus used would be less than this amount, the transaction is reverted.", + "projectId": "The ID of the project to use the surplus allowance of.", + "token": "The token being paid out from the surplus." + }, + "returns": { + "amountPaidOut": "The number of tokens that were sent to the beneficiary, as a fixed point number with the same amount of decimals as the terminal." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for PROJECTS." + }, + "FEE()": { + "notice": "The fee percent (out of `JBConstants.MAX_FEE`)." + }, + "FEELESS_ADDRESSES()": { + "notice": "The contract that stores addresses that shouldn't incur fees when being paid towards or from." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PERMIT2()": { + "notice": "The permit2 utility." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "SPLITS()": { + "notice": "The contract that stores splits for each project." + }, + "STORE()": { + "notice": "The contract that stores and manages the terminal's data." + }, + "accountingContextForTokenOf(uint256,address)": { + "notice": "A project's accounting context for a token." + }, + "accountingContextsOf(uint256)": { + "notice": "The tokens accepted by a project." + }, + "addAccountingContextsFor(uint256,address[])": { + "notice": "Adds accounting contexts for a project to this terminal so the project can begin accepting the tokens in those contexts." + }, + "addToBalanceOf(uint256,address,uint256,bool,string,bytes)": { + "notice": "Adds funds to a project's balance without minting tokens." + }, + "currentSurplusOf(uint256,uint256,uint256)": { + "notice": "Gets the total current surplus amount in this terminal for a project, in terms of a given currency." + }, + "executePayout((bool,uint256,uint256,address,uint256,address),uint256,address,uint256,address)": { + "notice": "Executes a payout to a split." + }, + "executeProcessFee(uint256,address,uint256,address,address)": { + "notice": "Process a specified amount of fees for a project." + }, + "heldFeesOf(uint256,address)": { + "notice": "Fees that are being held for a project." + }, + "migrateBalanceOf(uint256,address,address)": { + "notice": "Migrate a project's funds and operations to a new terminal that accepts the same token type." + }, + "pay(uint256,address,uint256,address,uint256,string,bytes)": { + "notice": "Pay a project with tokens." + }, + "processHeldFeesOf(uint256,address)": { + "notice": "Process any fees that are being held for the project." + }, + "redeemTokensOf(address,uint256,address,uint256,uint256,address,bytes)": { + "notice": "Holders can redeem a project's tokens to reclaim some of that project's surplus tokens, or to trigger rules determined by the current ruleset's data hook and redeem hook." + }, + "sendPayoutsOf(uint256,address,uint256,uint256,uint256)": { + "notice": "Sends payouts to a project's current payout split group, according to its ruleset, up to its current payout limit." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "useAllowanceOf(uint256,address,uint256,uint256,uint256,address,string)": { + "notice": "Allows a project to pay out funds from its surplus up to the current surplus allowance." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBMultiTerminal.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBPermissions.json b/deployments/nana-core/sepolia/JBPermissions.json new file mode 100644 index 00000000..90e1c05d --- /dev/null +++ b/deployments/nana-core/sepolia/JBPermissions.json @@ -0,0 +1,629 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBPermissions", + "address": "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasPermission", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasPermissions", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permissionsOf", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setPermissionsFor", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "permissionsData", + "type": "tuple", + "internalType": "struct JBPermissionsData", + "components": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OperatorPermissionsSet", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "permissionIds", + "type": "uint256[]", + "indexed": false, + "internalType": "uint256[]" + }, + { + "name": "packed", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "PERMISSION_ID_OUT_OF_BOUNDS", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PERMISSION_ID_OUT_OF_BOUNDS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"packed\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"OperatorPermissionsSet\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"permissionId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"hasPermissions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"permissionsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"struct JBPermissionsData\",\"name\":\"permissionsData\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"permissionIds\",\"type\":\"uint256[]\"}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setPermissionsFor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"hasPermission(address,address,uint256,uint256)\":{\"params\":{\"account\":\"The account being operated on behalf of.\",\"operator\":\"The operator to check.\",\"permissionId\":\"The permission ID to check for.\",\"projectId\":\"The project ID that the operator has permission to operate under. 0 represents all projects.\"},\"returns\":{\"_0\":\"A flag indicating whether the operator has the specified permission.\"}},\"hasPermissions(address,address,uint256,uint256[])\":{\"params\":{\"account\":\"The account being operated on behalf of.\",\"operator\":\"The operator to check.\",\"permissionIds\":\"An array of permission IDs to check for.\",\"projectId\":\"The project ID that the operator has permission to operate under. 0 represents all projects.\"},\"returns\":{\"_0\":\"A flag indicating whether the operator has all specified permissions.\"}},\"setPermissionsFor(address,(address,uint256,uint256[]))\":{\"details\":\"Only an address can give permissions to or revoke permissions from its operators.\",\"params\":{\"account\":\"The account setting its operators' permissions.\",\"permissionsData\":\"The data which specifies the permissions the operator is being given.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"hasPermission(address,address,uint256,uint256)\":{\"notice\":\"Check if an operator has a specific permission for a specific address and project ID.\"},\"hasPermissions(address,address,uint256,uint256[])\":{\"notice\":\"Check if an operator has all of the specified permissions for a specific address and project ID.\"},\"permissionsOf(address,address,uint256)\":{\"notice\":\"The permissions that an operator has been given by an account for a specific project.\"},\"setPermissionsFor(address,(address,uint256,uint256[]))\":{\"notice\":\"Sets permissions for an operator.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBPermissions.sol\":\"JBPermissions\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"src/JBPermissions.sol\":{\"keccak256\":\"0x5d7cbebd7ea868bb17b2df9bd68ebc7a6fd5299c75601fe755b53f14c368d963\",\"urls\":[\"bzz-raw://1812675baaafeeb5074c7ddc6f9b5c5344fe5a213534f1a53f92d664ab0e2d02\",\"dweb:/ipfs/QmY9TC8njokB9gfPPEvDbTntNSd59K3hgKQia4oeJurNwr\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [], + "bytecode": "0x60a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "hasPermission(address,address,uint256,uint256)": { + "params": { + "account": "The account being operated on behalf of.", + "operator": "The operator to check.", + "permissionId": "The permission ID to check for.", + "projectId": "The project ID that the operator has permission to operate under. 0 represents all projects." + }, + "returns": { + "_0": "A flag indicating whether the operator has the specified permission." + } + }, + "hasPermissions(address,address,uint256,uint256[])": { + "params": { + "account": "The account being operated on behalf of.", + "operator": "The operator to check.", + "permissionIds": "An array of permission IDs to check for.", + "projectId": "The project ID that the operator has permission to operate under. 0 represents all projects." + }, + "returns": { + "_0": "A flag indicating whether the operator has all specified permissions." + } + }, + "setPermissionsFor(address,(address,uint256,uint256[]))": { + "details": "Only an address can give permissions to or revoke permissions from its operators.", + "params": { + "account": "The account setting its operators' permissions.", + "permissionsData": "The data which specifies the permissions the operator is being given." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "hasPermission(address,address,uint256,uint256)": { + "notice": "Check if an operator has a specific permission for a specific address and project ID." + }, + "hasPermissions(address,address,uint256,uint256[])": { + "notice": "Check if an operator has all of the specified permissions for a specific address and project ID." + }, + "permissionsOf(address,address,uint256)": { + "notice": "The permissions that an operator has been given by an account for a specific project." + }, + "setPermissionsFor(address,(address,uint256,uint256[]))": { + "notice": "Sets permissions for an operator." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBPermissions.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBPrices.json b/deployments/nana-core/sepolia/JBPrices.json new file mode 100644 index 00000000..8ef70c35 --- /dev/null +++ b/deployments/nana-core/sepolia/JBPrices.json @@ -0,0 +1,676 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBPrices", + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "permissions", + "type": "address", + "internalType": "contract IJBPermissions" + }, + { + "name": "projects", + "type": "address", + "internalType": "contract IJBProjects" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DEFAULT_PROJECT_ID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PERMISSIONS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPermissions" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROJECTS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBProjects" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addPriceFeedFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "feed", + "type": "address", + "internalType": "contract IJBPriceFeed" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "priceFeedFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPriceFeed" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pricePerUnitOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AddPriceFeed", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "pricingCurrency", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "unitCurrency", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "feed", + "type": "address", + "indexed": false, + "internalType": "contract IJBPriceFeed" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "INVALID_CURRENCY", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "PRICE_FEED_ALREADY_EXISTS", + "inputs": [] + }, + { + "type": "error", + "name": "PRICE_FEED_NOT_FOUND", + "inputs": [] + }, + { + "type": "error", + "name": "UNAUTHORIZED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "contractAddress": null, + "cumulativeGasUsed": "16393579", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1014514380", + "gasUsed": "9789398", + "hash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "index": 60, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 67, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x6daf75799cd1798b187fd5ba7fad6ef446eee635c5906fc027f3e7704902c8f0" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 68, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 69, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 70, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 71, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 72, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 73, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 74, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 75, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 76, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 77, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 78, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 79, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 80, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 81, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 82, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 83, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 84, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 85, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 86, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 87, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + } + ], + "logsBloom": "0x00000010080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040800000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000000000000000100800000000200000000000000000000804000000020004000081010000000000000000000020208c00000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"permissions\",\"type\":\"address\"},{\"internalType\":\"contract IJBProjects\",\"name\":\"projects\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_CURRENCY\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PRICE_FEED_ALREADY_EXISTS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PRICE_FEED_NOT_FOUND\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"UNAUTHORIZED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"feed\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"AddPriceFeed\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DEFAULT_PROJECT_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PERMISSIONS\",\"outputs\":[{\"internalType\":\"contract IJBPermissions\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PROJECTS\",\"outputs\":[{\"internalType\":\"contract IJBProjects\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"feed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"addPriceFeedFor\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"priceFeedFor\",\"outputs\":[{\"internalType\":\"contract IJBPriceFeed\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pricingCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unitCurrency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"pricePerUnitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addPriceFeedFor(uint256,uint256,uint256,address)\":{\"details\":\"Existing feeds can't be modified. Neither can feeds that have already been set as defaults (project ID 0).\",\"params\":{\"feed\":\"The price feed being added.\",\"pricingCurrency\":\"The currency the feed's resulting price is in terms of.\",\"unitCurrency\":\"The currency being priced by the feed.\"}},\"constructor\":{\"params\":{\"owner\":\"The address that will own the contract.\",\"permissions\":\"A contract storing permissions.\",\"projects\":\"A contract which mints ERC-721s that represent project ownership and transfers.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pricePerUnitOf(uint256,uint256,uint256,uint256)\":{\"params\":{\"decimals\":\"The number of decimals the returned fixed point price should include.\",\"pricingCurrency\":\"The currency the feed's resulting price is in terms of.\",\"projectId\":\"The ID of the project to check the feed for. Feeds stored in ID 0 are used by default for all projects.\",\"unitCurrency\":\"The currency being priced by the feed.\"},\"returns\":{\"_0\":\"The `pricingCurrency` price of 1 `unitCurrency`, as a fixed point number with the specified number of decimals.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DEFAULT_PROJECT_ID()\":{\"notice\":\"The ID to store default values in.\"},\"PERMISSIONS()\":{\"notice\":\"A contract storing permissions.\"},\"PROJECTS()\":{\"notice\":\"Mints ERC-721s that represent project ownership and transfers.\"},\"addPriceFeedFor(uint256,uint256,uint256,address)\":{\"notice\":\"Add a price feed for the `unitCurrency`, priced in terms of the `pricingCurrency`.\"},\"priceFeedFor(uint256,uint256,uint256)\":{\"notice\":\"The available price feeds.\"},\"pricePerUnitOf(uint256,uint256,uint256,uint256)\":{\"notice\":\"Gets the `pricingCurrency` cost for one unit of the `unitCurrency`.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBPrices.sol\":\"JBPrices\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@bananapus/permission-ids/src/JBPermissionIds.sol\":{\"keccak256\":\"0xcc68735b4c801e953cb7962e069933f369515e7a4a09aea5b2170a268125a898\",\"urls\":[\"bzz-raw://e51f839d96be200efeca40ca4fb1d5b6096303564cdde5cf67aecf58e2d36db3\",\"dweb:/ipfs/QmRnJ5s974eUeyvTuLUpt4TK8t5TjVmz7DyDSAKxgYTnA5\"],\"license\":\"UNLICENSED\"},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBPrices.sol\":{\"keccak256\":\"0x72a9d8378947113c1e6c20afb09936eb3cab6f745c9989612cf4331278542423\",\"urls\":[\"bzz-raw://adc10aac203d3e4971fd2fc09dfbbf0e4528ced439a557fc7664c8271b12db61\",\"dweb:/ipfs/Qmc4cNYDDFfSpaaKaNRceSFkZqP5oJtkEi9CvRuUkoVAUx\"],\"license\":\"MIT\"},\"src/abstract/JBPermissioned.sol\":{\"keccak256\":\"0xbe593894bc9893f7fe5c96f14c013add8f50df762538e3d7cb96ed39ad195664\",\"urls\":[\"bzz-raw://efb81264b24776e6be537680abaeb8c4893e70d8a62231748d860e25a7c2340d\",\"dweb:/ipfs/QmacN9gFgPqkhTEwRD7Zben3whq9DRr2ZkSmScGvioTXXR\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissioned.sol\":{\"keccak256\":\"0x5b038d4dee116584e88b230920e56d48e135053e3f7e5642eaea14a775c1dad7\",\"urls\":[\"bzz-raw://19e43102f349fd4a1da1c0943ffb8f2950007fe4bb4bb7e8f74fc142575d091b\",\"dweb:/ipfs/QmXHAt4KzDTdDZgDDefEXH2WKi7NcfkJb9R7nxW5uDqsNp\"],\"license\":\"MIT\"},\"src/interfaces/IJBPermissions.sol\":{\"keccak256\":\"0x18870e500edf0fbadc353e273a5574701fb80466376b908c65e7cc3f11044d4d\",\"urls\":[\"bzz-raw://352a47c45853aec80e7acf0d286ade3106eb4cb456776b28a3c2f3f1091bed90\",\"dweb:/ipfs/QmQeYd3YbudYZy2hfbfht9kwhxhw4tuuLKMEYy9UY6dcSy\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/structs/JBPermissionsData.sol\":{\"keccak256\":\"0x8f0f69a6ebf5f3704e3dfcb3712fb9d3f94ae7c1ab89bf3e37bad42a3e7a0487\",\"urls\":[\"bzz-raw://57b0c5e52843e2217082889ed47b4da3943e0da4590d5768dcebfe3edad4a6b8\",\"dweb:/ipfs/QmRz48vuWLw81kUP836rh1qzqWiJFGbksgRUA9xGEDNKTY\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0xBA24624AE5dc821866E9E71Ed050412Ef01E2fe6", + "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x60c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d781565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe681565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d76001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "addPriceFeedFor(uint256,uint256,uint256,address)": { + "details": "Existing feeds can't be modified. Neither can feeds that have already been set as defaults (project ID 0).", + "params": { + "feed": "The price feed being added.", + "pricingCurrency": "The currency the feed's resulting price is in terms of.", + "unitCurrency": "The currency being priced by the feed." + } + }, + "constructor": { + "params": { + "owner": "The address that will own the contract.", + "permissions": "A contract storing permissions.", + "projects": "A contract which mints ERC-721s that represent project ownership and transfers." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pricePerUnitOf(uint256,uint256,uint256,uint256)": { + "params": { + "decimals": "The number of decimals the returned fixed point price should include.", + "pricingCurrency": "The currency the feed's resulting price is in terms of.", + "projectId": "The ID of the project to check the feed for. Feeds stored in ID 0 are used by default for all projects.", + "unitCurrency": "The currency being priced by the feed." + }, + "returns": { + "_0": "The `pricingCurrency` price of 1 `unitCurrency`, as a fixed point number with the specified number of decimals." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DEFAULT_PROJECT_ID()": { + "notice": "The ID to store default values in." + }, + "PERMISSIONS()": { + "notice": "A contract storing permissions." + }, + "PROJECTS()": { + "notice": "Mints ERC-721s that represent project ownership and transfers." + }, + "addPriceFeedFor(uint256,uint256,uint256,address)": { + "notice": "Add a price feed for the `unitCurrency`, priced in terms of the `pricingCurrency`." + }, + "priceFeedFor(uint256,uint256,uint256)": { + "notice": "The available price feeds." + }, + "pricePerUnitOf(uint256,uint256,uint256,uint256)": { + "notice": "Gets the `pricingCurrency` cost for one unit of the `unitCurrency`." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBPrices.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBProjects.json b/deployments/nana-core/sepolia/JBProjects.json new file mode 100644 index 00000000..34cd938c --- /dev/null +++ b/deployments/nana-core/sepolia/JBProjects.json @@ -0,0 +1,1518 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBProjects", + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "CLOCK_MODE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "clock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "count", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createFor", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegate", + "inputs": [ + { + "name": "delegatee", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegateBySig", + "inputs": [ + { + "name": "delegatee", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "v", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "r", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegates", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getApproved", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPastTotalSupply", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPastVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isApprovedForAll", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nonces", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ownerOf", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setApprovalForAll", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "approved", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTokenUriResolver", + "inputs": [ + { + "name": "newResolver", + "type": "address", + "internalType": "contract IJBTokenUriResolver" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenURI", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenUriResolver", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBTokenUriResolver" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "approved", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ApprovalForAll", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "approved", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Create", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DelegateChanged", + "inputs": [ + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "fromDelegate", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "toDelegate", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DelegateVotesChanged", + "inputs": [ + { + "name": "delegate", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "previousVotes", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newVotes", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetTokenUriResolver", + "inputs": [ + { + "name": "resolver", + "type": "address", + "indexed": true, + "internalType": "contract IJBTokenUriResolver" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CheckpointUnorderedInsertion", + "inputs": [] + }, + { + "type": "error", + "name": "ECDSAInvalidSignature", + "inputs": [] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureLength", + "inputs": [ + { + "name": "length", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ECDSAInvalidSignatureS", + "inputs": [ + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ERC5805FutureLookup", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "clock", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "error", + "name": "ERC6372InconsistentClock", + "inputs": [] + }, + { + "type": "error", + "name": "ERC721IncorrectOwner", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InsufficientApproval", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidApprover", + "inputs": [ + { + "name": "approver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidReceiver", + "inputs": [ + { + "name": "receiver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidSender", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721NonexistentToken", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidAccountNonce", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "currentNonce", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidShortString", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "SafeCastOverflowedUintDowncast", + "inputs": [ + { + "name": "bits", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "StringTooLong", + "inputs": [ + { + "name": "str", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "error", + "name": "VotesExpiredSignature", + "inputs": [ + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CheckpointUnorderedInsertion\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ECDSAInvalidSignature\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ECDSAInvalidSignatureLength\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"type\":\"error\",\"name\":\"ECDSAInvalidSignatureS\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"clock\",\"type\":\"uint48\"}],\"type\":\"error\",\"name\":\"ERC5805FutureLookup\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ERC6372InconsistentClock\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721IncorrectOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ERC721InsufficientApproval\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidApprover\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidOperator\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidReceiver\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"ERC721InvalidSender\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"ERC721NonexistentToken\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"InvalidAccountNonce\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"InvalidShortString\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableInvalidOwner\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"SafeCastOverflowedUintDowncast\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"type\":\"error\",\"name\":\"StringTooLong\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"VotesExpiredSignature\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Approval\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ApprovalForAll\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Create\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"DelegateChanged\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"previousVotes\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"newVotes\",\"type\":\"uint256\",\"indexed\":false}],\"type\":\"event\",\"name\":\"DelegateVotesChanged\",\"anonymous\":false},{\"inputs\":[],\"type\":\"event\",\"name\":\"EIP712DomainChanged\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"resolver\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetTokenUriResolver\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"Transfer\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"CLOCK_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"approve\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"clock\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"createFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"delegate\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"delegateBySig\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"safeTransferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"safeTransferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setApprovalForAll\"},{\"inputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"newResolver\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenUriResolver\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenUriResolver\",\"outputs\":[{\"internalType\":\"contract IJBTokenUriResolver\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"CLOCK_MODE()\":{\"details\":\"Machine-readable description of the clock as specified in EIP-6372.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"clock()\":{\"details\":\"Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match.\"},\"constructor\":{\"params\":{\"owner\":\"The owner of the contract who can set metadata.\"}},\"createFor(address)\":{\"details\":\"Anyone can create a project on an owner's behalf.\",\"params\":{\"owner\":\"The address that will be the owner of the project.\"},\"returns\":{\"projectId\":\"The token ID of the newly created project.\"}},\"delegate(address)\":{\"details\":\"Delegates votes from the sender to `delegatee`.\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Delegates votes from signer to `delegatee`.\"},\"delegates(address)\":{\"details\":\"Returns the delegate that `account` has chosen.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getPastTotalSupply(uint256)\":{\"details\":\"Returns the total supply of votes available at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes. Votes that have not been delegated are still part of total supply, even though they would not participate in a vote. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\"},\"getPastVotes(address,uint256)\":{\"details\":\"Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\"},\"getVotes(address)\":{\"details\":\"Returns the current amount of votes that `account` has.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"nonces(address)\":{\"details\":\"Returns the next unused nonce for an address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"setTokenUriResolver(address)\":{\"params\":{\"newResolver\":\"The address of the new resolver.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\",\"params\":{\"interfaceId\":\"The ID of the interface to check for adherance to.\"},\"returns\":{\"_0\":\"A flag indicating if the provided interface ID is supported.\"}},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get a URI of.\"},\"returns\":{\"_0\":\"The token URI to use for the provided `projectId`.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"count()\":{\"notice\":\"The number of projects that have been created using this contract.\"},\"createFor(address)\":{\"notice\":\"Create a new project for the specified owner, which mints an NFT (ERC-721) into their wallet.\"},\"setTokenUriResolver(address)\":{\"notice\":\"Sets the address of the resolver used to retrieve the tokenURI of projects.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Indicates if this contract adheres to the specified interface.\"},\"tokenURI(uint256)\":{\"notice\":\"Returns the URI where the ERC-721 standard JSON of a project is hosted.\"},\"tokenUriResolver()\":{\"notice\":\"The contract resolving each project ID to its ERC721 URI.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBProjects.sol\":\"JBProjects\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947\",\"urls\":[\"bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856\",\"dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/Votes.sol\":{\"keccak256\":\"0xb8f69828d41b3594afd7a8c6393565901c205d8b5baf5bd2e42dbac637172979\",\"urls\":[\"bzz-raw://c790253821191ac46b2050d87df820d4209871f90c616381e2c2c00ff3eaac34\",\"dweb:/ipfs/QmcPETTyuZBzDRL39JNXj3SBMdx3Y9o4fPQLSZ27py5Jim\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol\":{\"keccak256\":\"0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818\",\"urls\":[\"bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a\",\"dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol\":{\"keccak256\":\"0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33\",\"urls\":[\"bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb\",\"dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x13dd061770956c8489b80cfc89d9cdfc8ea2783d953691ea037a380731d52784\",\"urls\":[\"bzz-raw://ed37f0f86e7fe31659e48c3a2a5920a92dd7f13c85cf8991fb79fe5f01e08efd\",\"dweb:/ipfs/QmUtm9bQGvjr9hHGwkPWrbgFmVqzaJcxjkaYDex2oGsonS\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x7f7a26306c79a65fb8b3b6c757cd74660c532cd8a02e165488e30027dd34ca49\",\"urls\":[\"bzz-raw://d01e0b2b837ee2f628545e54d8715b49c7ef2befd08356c2e7f6c50dde8a1c22\",\"dweb:/ipfs/QmWBAn6y2D1xgftci97Z3qR9tQnkvwQpYwFwkTvDMvqU4i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol\":{\"keccak256\":\"0x51eec12bef5f18ea0bad353fbdc227c67b9082d1b459f7c87f47711ad152b0b3\",\"urls\":[\"bzz-raw://3f9142b8e720fa76191a966be6fd93a2a4357f5ac86bbb5cb050e53add32bfbe\",\"dweb:/ipfs/QmdFWtPT9PrMpQkExuDLCAELqA8yfYjQpfWKymdHdRTy2T\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol\":{\"keccak256\":\"0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad\",\"urls\":[\"bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b\",\"dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"],\"license\":\"MIT\"},\"src/JBProjects.sol\":{\"keccak256\":\"0xb959e3d60bc4a8a43b9358be16549ca6d10059db3467c43703fa0c6c8e73621a\",\"urls\":[\"bzz-raw://5eb424d178e5946688c7ad6bfc7420c3c8bd7e9d5b2a0fef175462a6a4710012\",\"dweb:/ipfs/QmeXuNoYXrNZVrom4f6Mk5bcKbGk5BtRCzXKf9cpZDoCKW\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD" + ], + "bytecode": "0x6101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f4a75696365626f782050726f6a65637473000000000000000000000000000011600661162d565b60606108957f3100000000000000000000000000000000000000000000000000000000000001600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d71614801561174857507f0000000000000000000000000000000000000000000000000000000000aa36a746145b1561177257507f4420e578c852ced8aca9b342260dfc2481793bb9f15aad8eb54d1b79739ef75190565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f2e5c5c1c4affeaeda2d3db263faddbd323c18ac7d44a6ca994665583d3b15dad918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "CLOCK_MODE()": { + "details": "Machine-readable description of the clock as specified in EIP-6372." + }, + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "clock()": { + "details": "Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match." + }, + "constructor": { + "params": { + "owner": "The owner of the contract who can set metadata." + } + }, + "createFor(address)": { + "details": "Anyone can create a project on an owner's behalf.", + "params": { + "owner": "The address that will be the owner of the project." + }, + "returns": { + "projectId": "The token ID of the newly created project." + } + }, + "delegate(address)": { + "details": "Delegates votes from the sender to `delegatee`." + }, + "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": { + "details": "Delegates votes from signer to `delegatee`." + }, + "delegates(address)": { + "details": "Returns the delegate that `account` has chosen." + }, + "eip712Domain()": { + "details": "See {IERC-5267}." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "getPastTotalSupply(uint256)": { + "details": "Returns the total supply of votes available at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes. Votes that have not been delegated are still part of total supply, even though they would not participate in a vote. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined." + }, + "getPastVotes(address,uint256)": { + "details": "Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined." + }, + "getVotes(address)": { + "details": "Returns the current amount of votes that `account` has." + }, + "isApprovedForAll(address,address)": { + "details": "See {IERC721-isApprovedForAll}." + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "nonces(address)": { + "details": "Returns the next unused nonce for an address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "setTokenUriResolver(address)": { + "params": { + "newResolver": "The address of the new resolver." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}.", + "params": { + "interfaceId": "The ID of the interface to check for adherance to." + }, + "returns": { + "_0": "A flag indicating if the provided interface ID is supported." + } + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "tokenURI(uint256)": { + "params": { + "projectId": "The ID of the project to get a URI of." + }, + "returns": { + "_0": "The token URI to use for the provided `projectId`." + } + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "count()": { + "notice": "The number of projects that have been created using this contract." + }, + "createFor(address)": { + "notice": "Create a new project for the specified owner, which mints an NFT (ERC-721) into their wallet." + }, + "setTokenUriResolver(address)": { + "notice": "Sets the address of the resolver used to retrieve the tokenURI of projects." + }, + "supportsInterface(bytes4)": { + "notice": "Indicates if this contract adheres to the specified interface." + }, + "tokenURI(uint256)": { + "notice": "Returns the URI where the ERC-721 standard JSON of a project is hosted." + }, + "tokenUriResolver()": { + "notice": "The contract resolving each project ID to its ERC721 URI." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBProjects.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBRulesets.json b/deployments/nana-core/sepolia/JBRulesets.json new file mode 100644 index 00000000..ba13ef5d --- /dev/null +++ b/deployments/nana-core/sepolia/JBRulesets.json @@ -0,0 +1,1157 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBRulesets", + "address": "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentApprovalStatusForLatestRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestQueuedRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approvalStatus", + "type": "uint8", + "internalType": "enum JBApprovalStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestRulesetIdOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "queueFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rulesetsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startingId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "size", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "rulesets", + "type": "tuple[]", + "internalType": "struct JBRuleset[]", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "upcomingRulesetOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateRulesetWeightCache", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "RulesetInitialized", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RulesetQueued", + "inputs": [ + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "indexed": false, + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "mustStartAtOrAfter", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "BLOCK_ALREADY_CONTAINS_RULESET", + "inputs": [] + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_DECAY_RATE", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_APPROVAL_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_DURATION", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET_END_TIME", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_WEIGHT", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"BLOCK_ALREADY_CONTAINS_RULESET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_DECAY_RATE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_APPROVAL_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_DURATION\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET_END_TIME\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_WEIGHT\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\",\"indexed\":true}],\"type\":\"event\",\"name\":\"RulesetInitialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"hook\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"RulesetQueued\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentApprovalStatusForLatestRulesetOf\",\"outputs\":[{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestQueuedRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"enum JBApprovalStatus\",\"name\":\"approvalStatus\",\"type\":\"uint8\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"latestRulesetIdOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mustStartAtOrAfter\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"queueFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startingId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"rulesetsOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset[]\",\"name\":\"rulesets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"upcomingRulesetOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"updateRulesetWeightCache\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"currentApprovalStatusForLatestRulesetOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to check the approval status of.\"},\"returns\":{\"_0\":\"The project's current approval status.\"}},\"currentOf(uint256)\":{\"details\":\"If a current ruleset of the project is not found, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project to get the current ruleset of.\"},\"returns\":{\"ruleset\":\"The project's current ruleset.\"}},\"getRulesetOf(uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to which the ruleset belongs.\",\"rulesetId\":\"The ID of the ruleset to get the struct of.\"},\"returns\":{\"ruleset\":\"The ruleset struct.\"}},\"latestQueuedRulesetOf(uint256)\":{\"details\":\"Returns struct and status for the ruleset initialized furthest in the future (at the end of the rulset queue).\",\"params\":{\"projectId\":\"The ID of the project to get the latest queued ruleset of.\"},\"returns\":{\"approvalStatus\":\"The approval hook's status for the ruleset.\",\"ruleset\":\"The project's latest queued ruleset's struct.\"}},\"queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)\":{\"details\":\"Only a project's current controller can queue its rulesets.\",\"params\":{\"approvalHook\":\"An address of a contract that says whether a proposed ruleset should be accepted or rejected. It can be used to create rules around how a project owner can change ruleset parameters over time.\",\"decayRate\":\"A percent by how much the `weight` of the subsequent ruleset should be reduced, if the project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of `JBConstants.MAX_DECAY_RATE`.\",\"duration\":\"The number of seconds the ruleset lasts for, after which a new ruleset will start. A duration of 0 means that the ruleset will stay active until the project owner explicitly issues a reconfiguration, at which point a new ruleset will immediately start with the updated properties. If the duration is greater than 0, a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will apply to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same properties but new `start` timestamp and a decayed `weight`.\",\"metadata\":\"Arbitrary extra data to associate with this ruleset. This metadata is not used by `JBRulesets`.\",\"mustStartAtOrAfter\":\"The earliest time the ruleset can start. The ruleset cannot start before this timestamp.\",\"projectId\":\"The ID of the project the ruleset is being queued for.\",\"weight\":\"A fixed point number with 18 decimals that contracts can use to base arbitrary calculations on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is received.\"},\"returns\":{\"_0\":\"The struct of the new ruleset.\"}},\"rulesetsOf(uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the rulesets of.\",\"size\":\"The maximum number of rulesets to return.\",\"startingId\":\"The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used.\"},\"returns\":{\"rulesets\":\"The rulesets as an array of `JBRuleset` structs.\"}},\"upcomingRulesetOf(uint256)\":{\"details\":\"If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.\",\"params\":{\"projectId\":\"The ID of the project to get the upcoming ruleset of.\"},\"returns\":{\"ruleset\":\"The struct for the project's upcoming ruleset.\"}},\"updateRulesetWeightCache(uint256)\":{\"params\":{\"projectId\":\"The ID of the project having its ruleset weight cached.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"currentApprovalStatusForLatestRulesetOf(uint256)\":{\"notice\":\"The current approval status of a given project's latest ruleset.\"},\"currentOf(uint256)\":{\"notice\":\"The ruleset that is currently active for the specified project.\"},\"getRulesetOf(uint256,uint256)\":{\"notice\":\"Get the ruleset struct for a given `rulesetId` and `projectId`.\"},\"latestQueuedRulesetOf(uint256)\":{\"notice\":\"The latest ruleset queued for a project. Returns the ruleset's struct and its current approval status.\"},\"latestRulesetIdOf(uint256)\":{\"notice\":\"The ID of the ruleset with the latest start time for a specific project, whether the ruleset has been approved or not.\"},\"queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)\":{\"notice\":\"Queues the upcoming approvable ruleset for the specified project.\"},\"rulesetsOf(uint256,uint256,uint256)\":{\"notice\":\"Get an array of a project's rulesets up to a maximum array size, sorted from latest to earliest.\"},\"upcomingRulesetOf(uint256)\":{\"notice\":\"The ruleset that's up next for a project.\"},\"updateRulesetWeightCache(uint256)\":{\"notice\":\"Cache the value of the ruleset weight.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBRulesets.sol\":\"JBRulesets\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBRulesets.sol\":{\"keccak256\":\"0xd92f2897151637ec46f1a70d39ce45670ce3aafb03f3539240a943994fd0444b\",\"urls\":[\"bzz-raw://50415496ef3025d2d7c466d9b7888f0797f42877b401567b5dd3fe9e7ba95f62\",\"dweb:/ipfs/QmXqzzjpDRgJHEmkWm2h7HMVaLEEQ7pnvHNh86gkSsDQiv\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWeightCache.sol\":{\"keccak256\":\"0x20da9376d0b4b24f7bfb049ac13991ac4a9f5676c3bae5c6fb049a78239d1529\",\"urls\":[\"bzz-raw://11f9b1b4373ce700b82e4159bd6688115aae349996f73d3571abf99fa8cdb1aa\",\"dweb:/ipfs/QmV8DxuoUskd6frKLhT61Sq4VTCygrcS6jbXHJU9KmHX1h\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "currentApprovalStatusForLatestRulesetOf(uint256)": { + "params": { + "projectId": "The ID of the project to check the approval status of." + }, + "returns": { + "_0": "The project's current approval status." + } + }, + "currentOf(uint256)": { + "details": "If a current ruleset of the project is not found, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project to get the current ruleset of." + }, + "returns": { + "ruleset": "The project's current ruleset." + } + }, + "getRulesetOf(uint256,uint256)": { + "params": { + "projectId": "The ID of the project to which the ruleset belongs.", + "rulesetId": "The ID of the ruleset to get the struct of." + }, + "returns": { + "ruleset": "The ruleset struct." + } + }, + "latestQueuedRulesetOf(uint256)": { + "details": "Returns struct and status for the ruleset initialized furthest in the future (at the end of the rulset queue).", + "params": { + "projectId": "The ID of the project to get the latest queued ruleset of." + }, + "returns": { + "approvalStatus": "The approval hook's status for the ruleset.", + "ruleset": "The project's latest queued ruleset's struct." + } + }, + "queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)": { + "details": "Only a project's current controller can queue its rulesets.", + "params": { + "approvalHook": "An address of a contract that says whether a proposed ruleset should be accepted or rejected. It can be used to create rules around how a project owner can change ruleset parameters over time.", + "decayRate": "A percent by how much the `weight` of the subsequent ruleset should be reduced, if the project owner hasn't queued the subsequent ruleset with an explicit `weight`. If it's 0, each ruleset will have equal weight. If the number is 90%, the next ruleset will have a 10% smaller weight. This weight is out of `JBConstants.MAX_DECAY_RATE`.", + "duration": "The number of seconds the ruleset lasts for, after which a new ruleset will start. A duration of 0 means that the ruleset will stay active until the project owner explicitly issues a reconfiguration, at which point a new ruleset will immediately start with the updated properties. If the duration is greater than 0, a project owner cannot make changes to a ruleset's parameters while it is active – any proposed changes will apply to the subsequent ruleset. If no changes are proposed, a ruleset rolls over to another one with the same properties but new `start` timestamp and a decayed `weight`.", + "metadata": "Arbitrary extra data to associate with this ruleset. This metadata is not used by `JBRulesets`.", + "mustStartAtOrAfter": "The earliest time the ruleset can start. The ruleset cannot start before this timestamp.", + "projectId": "The ID of the project the ruleset is being queued for.", + "weight": "A fixed point number with 18 decimals that contracts can use to base arbitrary calculations on. For example, payment terminals can use this to determine how many tokens should be minted when a payment is received." + }, + "returns": { + "_0": "The struct of the new ruleset." + } + }, + "rulesetsOf(uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the rulesets of.", + "size": "The maximum number of rulesets to return.", + "startingId": "The ID of the ruleset to begin with. This will be the latest ruleset in the result. If 0 is passed, the project's latest ruleset will be used." + }, + "returns": { + "rulesets": "The rulesets as an array of `JBRuleset` structs." + } + }, + "upcomingRulesetOf(uint256)": { + "details": "If an upcoming ruleset is not found for the project, returns an empty ruleset with all properties set to 0.", + "params": { + "projectId": "The ID of the project to get the upcoming ruleset of." + }, + "returns": { + "ruleset": "The struct for the project's upcoming ruleset." + } + }, + "updateRulesetWeightCache(uint256)": { + "params": { + "projectId": "The ID of the project having its ruleset weight cached." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "currentApprovalStatusForLatestRulesetOf(uint256)": { + "notice": "The current approval status of a given project's latest ruleset." + }, + "currentOf(uint256)": { + "notice": "The ruleset that is currently active for the specified project." + }, + "getRulesetOf(uint256,uint256)": { + "notice": "Get the ruleset struct for a given `rulesetId` and `projectId`." + }, + "latestQueuedRulesetOf(uint256)": { + "notice": "The latest ruleset queued for a project. Returns the ruleset's struct and its current approval status." + }, + "latestRulesetIdOf(uint256)": { + "notice": "The ID of the ruleset with the latest start time for a specific project, whether the ruleset has been approved or not." + }, + "queueFor(uint256,uint256,uint256,uint256,address,uint256,uint256)": { + "notice": "Queues the upcoming approvable ruleset for the specified project." + }, + "rulesetsOf(uint256,uint256,uint256)": { + "notice": "Get an array of a project's rulesets up to a maximum array size, sorted from latest to earliest." + }, + "upcomingRulesetOf(uint256)": { + "notice": "The ruleset that's up next for a project." + }, + "updateRulesetWeightCache(uint256)": { + "notice": "Cache the value of the ruleset weight." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBRulesets.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBSplits.json b/deployments/nana-core/sepolia/JBSplits.json new file mode 100644 index 00000000..63b8c3df --- /dev/null +++ b/deployments/nana-core/sepolia/JBSplits.json @@ -0,0 +1,684 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBSplits", + "address": "0x7CB4a75D21c45d1A0A0333BFa626f54636c84Da5", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FALLBACK_RULESET_ID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setSplitGroupsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splitGroups", + "type": "tuple[]", + "internalType": "struct JBSplitGroup[]", + "components": [ + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "splitsOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "groupId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "splits", + "type": "tuple[]", + "internalType": "struct JBSplit[]", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "SetSplit", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rulesetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "group", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "split", + "type": "tuple", + "indexed": false, + "internalType": "struct JBSplit", + "components": [ + { + "name": "preferAddToBalance", + "type": "bool", + "internalType": "bool" + }, + { + "name": "percent", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "lockedUntil", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hook", + "type": "address", + "internalType": "contract IJBSplitHook" + } + ] + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_LOCKED_UNTIL", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PROJECT_ID", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SPLIT_PERCENT", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_TOTAL_PERCENT", + "inputs": [] + }, + { + "type": "error", + "name": "PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_LOCKED_UNTIL\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_PROJECT_ID\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_SPLIT_PERCENT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_TOTAL_PERCENT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PREVIOUS_LOCKED_SPLITS_NOT_INCLUDED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"group\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"struct JBSplit\",\"name\":\"split\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}],\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetSplit\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"FALLBACK_RULESET_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplitGroup[]\",\"name\":\"splitGroups\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setSplitGroupsOf\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"groupId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"splitsOf\",\"outputs\":[{\"internalType\":\"struct JBSplit[]\",\"name\":\"splits\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"bool\",\"name\":\"preferAddToBalance\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"percent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockedUntil\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBSplitHook\",\"name\":\"hook\",\"type\":\"address\"}]}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"details\":\"Only a project's controller can set its splits.The new split groups must include any currently set splits that are locked.\",\"params\":{\"projectId\":\"The ID of the project to set the split groups of.\",\"rulesetId\":\"The ID of the ruleset the split groups should be active in. Send 0 to set the default split that'll be active if no ruleset has specific splits set. The default's default is the project's owner.\",\"splitGroups\":\"An array of split groups to set.\"}},\"splitsOf(uint256,uint256,uint256)\":{\"details\":\"If splits aren't found at the given `rulesetId`, they'll be sought in the FALLBACK_RULESET_ID of 0.\",\"params\":{\"groupId\":\"The identifying group of the splits.\",\"projectId\":\"The ID of the project to get splits for.\",\"rulesetId\":\"An identifier within which the returned splits should be considered active.\"},\"returns\":{\"splits\":\"An array of all splits for the project.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"FALLBACK_RULESET_ID()\":{\"notice\":\"the ID of the ruleset that will be checked if nothing was found in the provided rulesetId.\"},\"setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])\":{\"notice\":\"Sets a project's split groups.\"},\"splitsOf(uint256,uint256,uint256)\":{\"notice\":\"Get the split structs for the specified project ID, within the specified ruleset, for the specified group. The splits stored at ruleset 0 are used by default during a ruleset if the splits for the specific ruleset aren't set.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBSplits.sol\":\"JBSplits\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"src/JBSplits.sol\":{\"keccak256\":\"0xb617e399f74582f9e4684059d732e72ae4ee887cf7f533e3c3e43cfa1695333b\",\"urls\":[\"bzz-raw://26d025f906cb7586cbac8e666b518553d7cb35d4bddf9bfdb8f4b3f7399ab4fd\",\"dweb:/ipfs/QmekRKnrfALw964FDaMhEWBQmDCKRDqqnKZtD7vDZKDdNV\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "details": "Only a project's controller can set its splits.The new split groups must include any currently set splits that are locked.", + "params": { + "projectId": "The ID of the project to set the split groups of.", + "rulesetId": "The ID of the ruleset the split groups should be active in. Send 0 to set the default split that'll be active if no ruleset has specific splits set. The default's default is the project's owner.", + "splitGroups": "An array of split groups to set." + } + }, + "splitsOf(uint256,uint256,uint256)": { + "details": "If splits aren't found at the given `rulesetId`, they'll be sought in the FALLBACK_RULESET_ID of 0.", + "params": { + "groupId": "The identifying group of the splits.", + "projectId": "The ID of the project to get splits for.", + "rulesetId": "An identifier within which the returned splits should be considered active." + }, + "returns": { + "splits": "An array of all splits for the project." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "FALLBACK_RULESET_ID()": { + "notice": "the ID of the ruleset that will be checked if nothing was found in the provided rulesetId." + }, + "setSplitGroupsOf(uint256,uint256,(uint256,(bool,uint256,uint256,address,uint256,address)[])[])": { + "notice": "Sets a project's split groups." + }, + "splitsOf(uint256,uint256,uint256)": { + "notice": "Get the split structs for the specified project ID, within the specified ruleset, for the specified group. The splits stored at ruleset 0 are used by default during a ruleset if the splits for the specific ruleset aren't set." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBSplits.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBTerminalStore.json b/deployments/nana-core/sepolia/JBTerminalStore.json new file mode 100644 index 00000000..25bd2abf --- /dev/null +++ b/deployments/nana-core/sepolia/JBTerminalStore.json @@ -0,0 +1,1466 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBTerminalStore", + "address": "0xa0D811360b0d49be8d33309D6eAE03D072E30312", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + }, + { + "name": "rulesets", + "type": "address", + "internalType": "contract IJBRulesets" + }, + { + "name": "prices", + "type": "address", + "internalType": "contract IJBPrices" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PRICES", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBPrices" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "RULESETS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBRulesets" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentReclaimableSurplusOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "useTotalSurplus", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentReclaimableSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "surplus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentSurplusOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentTotalSurplusOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "recordAddedBalanceFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordPaymentFrom", + "inputs": [ + { + "name": "payer", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "tuple", + "internalType": "struct JBTokenAmount", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "tokenCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hookSpecifications", + "type": "tuple[]", + "internalType": "struct JBPayHookSpecification[]", + "components": [ + { + "name": "hook", + "type": "address", + "internalType": "contract IJBPayHook" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordPayoutFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "amountPaidOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordRedemptionFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redeemCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "balanceAccountingContexts", + "type": "tuple[]", + "internalType": "struct JBAccountingContext[]", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "reclaimAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redemptionRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "hookSpecifications", + "type": "tuple[]", + "internalType": "struct JBRedeemHookSpecification[]", + "components": [ + { + "name": "hook", + "type": "address", + "internalType": "contract IJBRedeemHook" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "metadata", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordTerminalMigration", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordUsedAllowanceOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "accountingContext", + "type": "tuple", + "internalType": "struct JBAccountingContext", + "components": [ + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "decimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "currency", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "ruleset", + "type": "tuple", + "internalType": "struct JBRuleset", + "components": [ + { + "name": "cycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basedOnId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "start", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "duration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "weight", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "decayRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "approvalHook", + "type": "address", + "internalType": "contract IJBRulesetApprovalHook" + }, + { + "name": "metadata", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "usedAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "usedPayoutLimitOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "rulesetCycleNumber", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "usedSurplusAllowanceOf", + "inputs": [ + { + "name": "terminal", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "address" + }, + { + "name": "rulesetId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currency", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "error", + "name": "INADEQUATE_CONTROLLER_ALLOWANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INADEQUATE_TERMINAL_STORE_BALANCE", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_TOKENS", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_AMOUNT_TO_SEND_HOOK", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_RULESET", + "inputs": [] + }, + { + "type": "error", + "name": "PAYOUT_LIMIT_EXCEEDED", + "inputs": [] + }, + { + "type": "error", + "name": "PRBMath_MulDiv_Overflow", + "inputs": [ + { + "name": "x", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "y", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "denominator", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "RULESET_PAYMENT_PAUSED", + "inputs": [] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "TERMINAL_MIGRATION_NOT_ALLOWED", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "contractAddress": null, + "cumulativeGasUsed": "16393579", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1014514380", + "gasUsed": "9789398", + "hash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "index": 60, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 67, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x6daf75799cd1798b187fd5ba7fad6ef446eee635c5906fc027f3e7704902c8f0" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 68, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 69, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 70, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 71, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 72, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 73, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 74, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 75, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 76, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 77, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 78, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 79, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 80, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 81, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 82, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 83, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 84, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 85, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 86, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 87, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + } + ], + "logsBloom": "0x00000010080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040800000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000000000000000100800000000200000000000000000000804000000020004000081010000000000000000000020208c00000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"},{\"internalType\":\"contract IJBRulesets\",\"name\":\"rulesets\",\"type\":\"address\"},{\"internalType\":\"contract IJBPrices\",\"name\":\"prices\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_CONTROLLER_ALLOWANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INADEQUATE_TERMINAL_STORE_BALANCE\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_TOKENS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_AMOUNT_TO_SEND_HOOK\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INVALID_RULESET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PAYOUT_LIMIT_EXCEEDED\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"type\":\"error\",\"name\":\"PRBMath_MulDiv_Overflow\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RULESET_PAYMENT_PAUSED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TERMINAL_MIGRATION_NOT_ALLOWED\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"PRICES\",\"outputs\":[{\"internalType\":\"contract IJBPrices\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"RULESETS\",\"outputs\":[{\"internalType\":\"contract IJBRulesets\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"accountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"useTotalSurplus\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentReclaimableSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"surplus\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentReclaimableSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"accountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"currentTotalSurplusOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordAddedBalanceFor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"struct JBTokenAmount\",\"name\":\"amount\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordPaymentFrom\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBPayHookSpecification[]\",\"name\":\"hookSpecifications\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBPayHook\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordPayoutFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"amountPaidOut\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redeemCount\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"struct JBAccountingContext[]\",\"name\":\"balanceAccountingContexts\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordRedemptionFor\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"reclaimAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRate\",\"type\":\"uint256\"},{\"internalType\":\"struct JBRedeemHookSpecification[]\",\"name\":\"hookSpecifications\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"contract IJBRedeemHook\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordTerminalMigration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"struct JBAccountingContext\",\"name\":\"accountingContext\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"currency\",\"type\":\"uint32\"}]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recordUsedAllowanceOf\",\"outputs\":[{\"internalType\":\"struct JBRuleset\",\"name\":\"ruleset\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint256\",\"name\":\"cycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"basedOnId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decayRate\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBRulesetApprovalHook\",\"name\":\"approvalHook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"metadata\",\"type\":\"uint256\"}]},{\"internalType\":\"uint256\",\"name\":\"usedAmount\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rulesetCycleNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"usedPayoutLimitOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"terminal\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rulesetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currency\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"usedSurplusAllowanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\",\"prices\":\"A contract that exposes price feeds.\",\"rulesets\":\"A contract storing and managing project rulesets.\"}},\"currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)\":{\"details\":\"The returned amount in terms of the specified terminal's currency.The returned amount is represented as a fixed point number with the same amount of decimals as the specified terminal.\",\"params\":{\"accountingContexts\":\"The accounting contexts of tokens whose balances should contribute to the surplus being reclaimed from.\",\"currency\":\"The currency that the resulting number will be in terms of.\",\"decimals\":\"The number of decimals to include in the resulting fixed point number.\",\"projectId\":\"The ID of the project to get the redeemable surplus amount for.\",\"terminal\":\"The terminal the redeemable amount would come from.\",\"tokenCount\":\"The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\",\"useTotalSurplus\":\"A flag indicating whether the surplus used in the calculation should be summed from all of the project's terminals. If false, surplus should be limited to the amount in the specified `terminal`.\"},\"returns\":{\"_0\":\"The amount of surplus tokens that can be reclaimed by redeeming `tokenCount` tokens as a fixed point number with the specified number of decimals.\"}},\"currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the reclaimable surplus amount for.\",\"surplus\":\"The surplus amount to make the calculation with, as a fixed point number.\",\"tokenCount\":\"The number of tokens to make the calculation with, as a fixed point number with 18 decimals.\",\"totalSupply\":\"The total number of tokens to make the calculation with, as a fixed point number with 18 decimals.\"},\"returns\":{\"_0\":\"The surplus token amount that can be reclaimed, as a fixed point number with the same number of decimals as the provided `surplus`.\"}},\"currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)\":{\"details\":\"The surplus is the amount of funds a project has in a terminal in excess of its payout limit.The surplus is represented as a fixed point number with the same amount of decimals as the specified terminal.\",\"params\":{\"accountingContexts\":\"The accounting contexts of tokens whose balances should contribute to the surplus being calculated.\",\"currency\":\"The currency the resulting amount should be in terms of.\",\"decimals\":\"The number of decimals to expect in the resulting fixed point number.\",\"projectId\":\"The ID of the project to get surplus for.\",\"terminal\":\"The terminal the surplus is being calculated for.\"},\"returns\":{\"_0\":\"The current surplus amount the project has in the specified terminal.\"}},\"currentTotalSurplusOf(uint256,uint256,uint256)\":{\"params\":{\"currency\":\"The currency that the total surplus should be in terms of.\",\"decimals\":\"The number of decimals that the fixed point surplus should include.\",\"projectId\":\"The ID of the project to get the total surplus for.\"},\"returns\":{\"_0\":\"The current total surplus amount that the project has across all terminals.\"}},\"recordAddedBalanceFor(uint256,address,uint256)\":{\"params\":{\"amount\":\"The amount of terminal tokens added, as a fixed point number with the same amount of decimals as its relative terminal.\",\"projectId\":\"The ID of the project which funds are being added to the balance of.\",\"token\":\"The token being added to the balance.\"}},\"recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)\":{\"details\":\"Mints the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, mints tokens in proportion with the amount paid.\",\"params\":{\"amount\":\"The amount of tokens being paid. Includes the token being paid, their value, the number of decimals included, and the currency of the amount.\",\"beneficiary\":\"The address that should be the beneficiary of anything the payment yields (including project tokens minted by the payment).\",\"metadata\":\"Bytes to send to the data hook, if the project's current ruleset specifies one.\",\"payer\":\"The address that made the payment to the terminal.\",\"projectId\":\"The ID of the project being paid.\"},\"returns\":{\"hookSpecifications\":\"A list of pay hooks, including data and amounts to send to them. The terminal should fulfill these specifications.\",\"ruleset\":\"The ruleset the payment was made during, as a `JBRuleset` struct.\",\"tokenCount\":\"The number of project tokens that were minted, as a fixed point number with 18 decimals.\"}},\"recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)\":{\"params\":{\"accountingContext\":\"The context of the token being paid out.\",\"amount\":\"The amount to pay out (use from the payout limit), as a fixed point number.\",\"currency\":\"The currency of the `amount`. This must match the project's current ruleset's currency.\",\"projectId\":\"The ID of the project that is paying out funds.\"},\"returns\":{\"amountPaidOut\":\"The amount of terminal tokens paid out, as a fixed point number with the same amount of decimals as its relative terminal.\",\"ruleset\":\"The ruleset the payout was made during, as a `JBRuleset` struct.\"}},\"recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)\":{\"details\":\"Redeems the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, redeems tokens along a redemption bonding curve that is a function of the number of tokens being burned.\",\"params\":{\"accountingContext\":\"The accounting context of the token being reclaimed by the redemption.\",\"balanceAccountingContexts\":\"The accounting contexts of the tokens whose balances should contribute to the surplus being reclaimed from.\",\"holder\":\"The account that is redeeming tokens.\",\"metadata\":\"Bytes to send to the data hook, if the project's current ruleset specifies one.\",\"projectId\":\"The ID of the project being redeemed from.\",\"redeemCount\":\"The number of project tokens to redeem, as a fixed point number with 18 decimals.\"},\"returns\":{\"hookSpecifications\":\"A list of redeem hooks, including data and amounts to send to them. The terminal should fulfill these specifications.\",\"reclaimAmount\":\"The amount of tokens reclaimed from the terminal, as a fixed point number with 18 decimals.\",\"redemptionRate\":\"The redemption rate influencing the reclaim amount.\",\"ruleset\":\"The ruleset during the redemption was made during, as a `JBRuleset` struct. This ruleset will have a redemption rate provided by the redemption hook if applicable.\"}},\"recordTerminalMigration(uint256,address)\":{\"params\":{\"projectId\":\"The ID of the project being migrated.\",\"token\":\"The token being migrated.\"},\"returns\":{\"balance\":\"The project's current balance (which is being migrated), as a fixed point number with the same amount of decimals as its relative terminal.\"}},\"recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)\":{\"details\":\"When surplus allowance is \\\"used\\\", it is taken out of the project's surplus within a terminal.\",\"params\":{\"accountingContext\":\"The accounting context of the token whose balances should contribute to the surplus allowance being reclaimed from.\",\"amount\":\"The amount to use from the surplus allowance, as a fixed point number.\",\"currency\":\"The currency of the `amount`. Must match the currency of the surplus allowance.\",\"projectId\":\"The ID of the project to use the surplus allowance of.\"},\"returns\":{\"ruleset\":\"The ruleset during the surplus allowance is being used during, as a `JBRuleset` struct.\",\"usedAmount\":\"The amount of terminal tokens used, as a fixed point number with the same amount of decimals as its relative terminal.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"PRICES()\":{\"notice\":\"The contract that exposes price feeds.\"},\"RULESETS()\":{\"notice\":\"The contract storing and managing project rulesets.\"},\"balanceOf(address,uint256,address)\":{\"notice\":\"A project's balance of a specific token within a terminal.\"},\"currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)\":{\"notice\":\"The surplus amount that can currently be reclaimed from a terminal by redeeming the specified number of tokens, based on the total token supply and current surplus.\"},\"currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)\":{\"notice\":\"The current amount of surplus tokens from a terminal that can be reclaimed by redeeming the specified number of tokens, based on the specified total token supply and surplus amounts.\"},\"currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)\":{\"notice\":\"Gets the current surplus amount in a terminal for a specified project.\"},\"currentTotalSurplusOf(uint256,uint256,uint256)\":{\"notice\":\"Gets the current surplus amount for a specified project across all terminals.\"},\"recordAddedBalanceFor(uint256,address,uint256)\":{\"notice\":\"Records funds being added to a project's balance.\"},\"recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)\":{\"notice\":\"Records a payment to a project.\"},\"recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)\":{\"notice\":\"Records a payout from a project.\"},\"recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)\":{\"notice\":\"Records a redemption from a project.\"},\"recordTerminalMigration(uint256,address)\":{\"notice\":\"Records the migration of funds from this store.\"},\"recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)\":{\"notice\":\"Records a use of a project's surplus allowance.\"},\"usedPayoutLimitOf(address,uint256,address,uint256,uint256)\":{\"notice\":\"The currency-denominated amount of funds that a project has already paid out from its payout limit during the current ruleset for each terminal, in terms of the payout limit's currency.\"},\"usedSurplusAllowanceOf(address,uint256,address,uint256,uint256)\":{\"notice\":\"The currency-denominated amounts of funds that a project has used from its surplus allowance during the current ruleset for each terminal, in terms of the surplus allowance's currency.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBTerminalStore.sol\":\"JBTerminalStore\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@prb/math/src/Common.sol\":{\"keccak256\":\"0xaa374e2c26cc93e8c22a6953804ee05f811597ef5fa82f76824378b22944778b\",\"urls\":[\"bzz-raw://279c732e161d623cf4d8a9519ca4c42c0c2db99842d0eb2a20c10fde3fa722c9\",\"dweb:/ipfs/QmVViuUXbinQGqtG5M21SgVzKihiCbFUChd4tDhtvwRmxH\"],\"license\":\"MIT\"},\"src/JBTerminalStore.sol\":{\"keccak256\":\"0x061651822f7b0a94fca7c65bdeec41b25af7f87776a7a9b094186bd65f0ee49b\",\"urls\":[\"bzz-raw://843ec729dd7ce80f23189ace13a3f17706696e88409b49eb3cabef2b14cb7fab\",\"dweb:/ipfs/QmRGp9udBSEjCuH3iG2U1fRE3GBgiT91axvmRmr5VpGVWs\"],\"license\":\"MIT\"},\"src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBController.sol\":{\"keccak256\":\"0xfe88b4ddf528542fde8f8fcc650281f48ca291d5432ec3f02cf8f064ecd79b22\",\"urls\":[\"bzz-raw://f71da06a55abca8cdcc447fd554df2fa2377a276679b2113f2cec8db635d70a4\",\"dweb:/ipfs/QmT3H3aWByCVVAhiB1DrPuG1Scm4GtyXWVcEP1p7GCmVJA\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectoryAccessControl.sol\":{\"keccak256\":\"0x1e67f56849320a46f834aaa9bd62b170ff8ada7b224b4a81136193740fa0be4d\",\"urls\":[\"bzz-raw://ea8fbcec44abfe49d137bcae129b67e5479d6b17879301f88534c8a7fab00be4\",\"dweb:/ipfs/QmT6wrtYX4GRpffHUzupNwYebJ1dqkkKZLEewWsoyunsqw\"],\"license\":\"MIT\"},\"src/interfaces/IJBFundAccessLimits.sol\":{\"keccak256\":\"0x2a2ece23837bedde2fddb728476e558bc37c644f641d397a8e08e8a1a85ea390\",\"urls\":[\"bzz-raw://f44187b5a720cdbe5af325331a5e351fc8504853836fb54b997c597949246726\",\"dweb:/ipfs/QmSKM2aMpnof458iCeui2Wkf7S8FfBRGs9zF3QG5DJLf7C\"],\"license\":\"MIT\"},\"src/interfaces/IJBMigratable.sol\":{\"keccak256\":\"0xd69bd5aba01a68d82c303ef3adde47532abcace030a94296c3ea6988b401789c\",\"urls\":[\"bzz-raw://88f11a1c89899327746beba4fc830abf3ac2eb9c152c778e884a6eed6564971f\",\"dweb:/ipfs/QmTpKhSTVewpz7VyKcz6BJwH2LFKMwT7Qi5HNWmjEjwsdK\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"],\"license\":\"MIT\"},\"src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0x99525f31440b955742dce84ba57de9fc1221139b5367c1f834723bef9e13e6e1\",\"urls\":[\"bzz-raw://6fa03f0cd4ad87dd7cbae7bf7f54463450874291773c8f70f2c31ef2cae62bb0\",\"dweb:/ipfs/QmSPajPV5ismteJuB6Spzm9VmhTj2iS3eVrfpJC1Zuzg8n\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjectUriRegistry.sol\":{\"keccak256\":\"0x2799475228987e4f8334ac33d3935f759c9b8133db7383b4f622dde7a5dc0502\",\"urls\":[\"bzz-raw://d751731740f45df74eea48c9667e847ee2cddb2980ab4939c86bd17e6c6ed89b\",\"dweb:/ipfs/QmXW8SLTuhdUpfn7pRpdsYdcyuim8RTyagU37ULcj5UZhT\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBRedeemHook.sol\":{\"keccak256\":\"0x4ea5b7ed510c9d29aca47ae3f8b41ef075dff4b9909779ec2c0e5b7bc30250c6\",\"urls\":[\"bzz-raw://770b785134ba71e3284dc7e05e44f429e7a8393423ad45cf8fe540408a5b9633\",\"dweb:/ipfs/QmRjXJxZPA1qZos7QjeCxJZ8sCfXfkyDFbzkdqzaqCD9Ds\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5e9f921a6aa5d9396a12bbc0a878c3f5e8ae0a4ce8a3abe0de12e300718838d7\",\"urls\":[\"bzz-raw://6c9f0610f5bbe07554a1bdc39041be1284c20d81d930bec1eee2d374b86e03f4\",\"dweb:/ipfs/QmPH57wBoPERwDWkBCcj9c5tEUdeeLNe2kv1oFM7cTKVrd\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesetDataHook.sol\":{\"keccak256\":\"0x3fea9fcab6f0335e67f0f052cf5d3446e9310808f88b5878d21586be00f89f85\",\"urls\":[\"bzz-raw://5506848f471d308a14523f91202d76d960f8255e227d29d34b0892ef70315cae\",\"dweb:/ipfs/QmakRKFctSZobpem1caU2zXqhiPQnaYVa7Y6NdAPAonHaU\"],\"license\":\"MIT\"},\"src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xda1a9aef337cf9fede3f638ffa58aea2815b87fde0f79628834aa03af9f582d7\",\"urls\":[\"bzz-raw://7941690ba6d94500474978ff0f02ecc56335eae5937759878e25cc1ac30a8ecc\",\"dweb:/ipfs/QmZFc7wof6PzfBTkVyNkjaQrQbjc36CK4uC3Ee2vgihqyK\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplitHook.sol\":{\"keccak256\":\"0xc99bb76736acc5c6409d1ff54cb90218b547fdf7f8a7c0d03ddb7ac9eb35645e\",\"urls\":[\"bzz-raw://7fa7e56f426a758e6125e58d81137569964e46bdfeaf9ea081b9382d80b536a9\",\"dweb:/ipfs/Qmc1wwfBP4xoGKe4BcDnwL11y3Gvk4Dk8r6qqWD4jbdKK4\"],\"license\":\"MIT\"},\"src/interfaces/IJBSplits.sol\":{\"keccak256\":\"0x2f415b55c1d7b7fdd9ee938897a8a2b5b1c81d2ab2233d678953ea8ab9b3fb24\",\"urls\":[\"bzz-raw://f7cd02ef943cb49db501b300cbe56d5d62e4ac59caef5c38d697fdbdd21d5f9a\",\"dweb:/ipfs/QmXcxH6gBiBLes2kzSNDvPqVuDZxu1xyDPjfEziARMJhHb\"],\"license\":\"MIT\"},\"src/interfaces/IJBTerminalStore.sol\":{\"keccak256\":\"0x81d5eb6c877f535143d26d2bef7be97dabf95122db4b1c6fdd0adc32ddc704ca\",\"urls\":[\"bzz-raw://551ab223b3498a20ae7e2bb3da7169ffa2c0a9ab3bd22c7387b19d69915809a4\",\"dweb:/ipfs/Qma2n7QtVAHmB7pWQavQnSBCouAfh171KezhYbNNmdT3wH\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/libraries/JBConstants.sol\":{\"keccak256\":\"0x9d3a9a953f859d8ec79a599577f8972de6da7199cc1bfa7fdad017d4d722bcb4\",\"urls\":[\"bzz-raw://f151fcb53a8d2684eff8b9e56ac790bcbcadd8199a4fd4d17c5b224b22936722\",\"dweb:/ipfs/QmdAz1ZtCE8nTiC4AxQNLfJhnY3ndGum2Lbef7seKdvTdR\"],\"license\":\"MIT\"},\"src/libraries/JBFixedPointNumber.sol\":{\"keccak256\":\"0x687bdcb1353e2d29f1bd38bbadeb4ab0f2cbb351688f77e56365a25044577b53\",\"urls\":[\"bzz-raw://ad7f8756cf5f209cff9fbe8a65e799e29c159da55a3a2d532298acfb9d567311\",\"dweb:/ipfs/QmZMCox7uDwZrnbiZnZheizrG6PAisuHVuJgXK9rHn7PKU\"],\"license\":\"MIT\"},\"src/libraries/JBRulesetMetadataResolver.sol\":{\"keccak256\":\"0x83f25c531d9e212379b4326fd93bf658a0f6d0e839bbd67bff7b66b9b55fb670\",\"urls\":[\"bzz-raw://3eb4a41ececec705febac7b799d7224e67f12761ae3975d49dd8bddaac608ecd\",\"dweb:/ipfs/QmNgL5VccDhP5xofEcGWNKk3v4KG23wGF9vc3d4YJ5MLnv\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBAfterRedeemRecordedContext.sol\":{\"keccak256\":\"0x521f5d23a36f0da72362cd84890cc867bd83baa8dc836ba6c5066d51dba2f163\",\"urls\":[\"bzz-raw://6cc461313286dde62d045d6288e87bae5032e035796326f5b1ed6218e58aa9da\",\"dweb:/ipfs/QmQS2AkQwf2ANQieDuaUnpJEdXChoLv4CCbZqHkfywYPSR\"],\"license\":\"MIT\"},\"src/structs/JBBeforePayRecordedContext.sol\":{\"keccak256\":\"0x5b04e814da83c7e83ff892ab07eaad6abce6f7b85a75f8da9380e9fc3470bc81\",\"urls\":[\"bzz-raw://11c889aab993fce3e3cc2dedc15fc30dd367e7fef9b7b1bfd6a6a9f248781731\",\"dweb:/ipfs/QmVVtydCD1azeWhGLxA1hthxfLyKzMHZ1eVzCz3a3R5dLy\"],\"license\":\"MIT\"},\"src/structs/JBBeforeRedeemRecordedContext.sol\":{\"keccak256\":\"0x73eadaf6827e82f6ccbe3a1e2b2b7fc6c59cef471f73335041b30ddcc000989d\",\"urls\":[\"bzz-raw://2f3ee84662eed565dbdaed406ef836fffaf55cccd417575578152e5085d0b1f2\",\"dweb:/ipfs/QmaJGFS7hxJsiUdKvbv5BKhSwceDEzKBnt7t5YeNWvYgMK\"],\"license\":\"MIT\"},\"src/structs/JBCurrencyAmount.sol\":{\"keccak256\":\"0x12fe4b43f4824994624d4fe0abbd88c3fe7867fd637edb65c7f456dab27e2d6e\",\"urls\":[\"bzz-raw://8003a3e8f932cf891e86b827e67c9d31b0d34c2712e18c2bc333cfe5284ba6d5\",\"dweb:/ipfs/QmSoA6RsDcSnNzk6CB7KZtALkHmeSDAi2g6fg3TDmLDkWX\"],\"license\":\"MIT\"},\"src/structs/JBFundAccessLimitGroup.sol\":{\"keccak256\":\"0x9fdaa8d017b72da25f583700a444a86849df053f7fb8eac874ec5139bcf651e5\",\"urls\":[\"bzz-raw://c8e44c49ee444a98424a0dbeb6897a76a0bf00d88a613f62ac2012afdac754ee\",\"dweb:/ipfs/QmdYkAiRi5bXM1YYNkc7BiqimHSFodMGn1cjHR5hcpm4xH\"],\"license\":\"MIT\"},\"src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"],\"license\":\"MIT\"},\"src/structs/JBRedeemHookSpecification.sol\":{\"keccak256\":\"0x673d16ee1a91bf8de3b37e57284e60451b70a9c2d748c9cdc7a151f5624af18f\",\"urls\":[\"bzz-raw://ceeb5e81effa0f076c5630c756dfcf1548d09f822b255a0a6ee01e54de8c8ae2\",\"dweb:/ipfs/QmSMoMNPRhPMnuJNvWa6S59XRfycGz9o2ApNp63bUW6TdX\"],\"license\":\"MIT\"},\"src/structs/JBRuleset.sol\":{\"keccak256\":\"0x15b2bf3174d84846a91ccbf5a344dfb125b55ed9cf50102db8d6868844225189\",\"urls\":[\"bzz-raw://647416b025dbd941094db89cbc69f755c155bd6c87be3f322394ccc4a8e0442d\",\"dweb:/ipfs/QmTCL9xcHnxQ4t5AmCPoZvXDUPW5xhzhyyXYbkMdyg44au\"],\"license\":\"MIT\"},\"src/structs/JBRulesetConfig.sol\":{\"keccak256\":\"0x344405b459a345fa2cb072b162422b4e85e435ff6ee82eb2c382bf52db929f10\",\"urls\":[\"bzz-raw://e067a0c3fd190cd00177800f8f065264985d4f6737a758f068a8bf5ed1cfdad0\",\"dweb:/ipfs/QmPAMiyfi1cDtandkMSXgoNdo3WLvwmvdcPGeKiot9TTaz\"],\"license\":\"MIT\"},\"src/structs/JBRulesetMetadata.sol\":{\"keccak256\":\"0xfea54c9f98416d2aa05309e7ff76967d6968a614850a1e33e48fde793ea8b514\",\"urls\":[\"bzz-raw://bf55386cbab90dbc1296b2b0cbfdc217a4500d67702e4a093a4c78bd127ecd5c\",\"dweb:/ipfs/QmTRq9mZrNSXu7oCZwti4JbBFrbY6A5msRqi9RbtL49NAj\"],\"license\":\"MIT\"},\"src/structs/JBRulesetWithMetadata.sol\":{\"keccak256\":\"0x1bcfadf20488f6df65227f8d4d0fbf9b7539456a2389567f7fe3900d23289bc3\",\"urls\":[\"bzz-raw://0a15c399a71e5373f8c0484c6d6b83521eda31e063a2c53e4c5cec4e74550343\",\"dweb:/ipfs/QmQwi8zkjoTVXbK89NeETYimWCacTrNsesJdpLSvGdqMPX\"],\"license\":\"MIT\"},\"src/structs/JBSplit.sol\":{\"keccak256\":\"0x1d40fa4f1c911a53b9139f3d44d27cb58fa5c5d2cd793c7a21ccf52b9e61f848\",\"urls\":[\"bzz-raw://9897d2c29fc65fe16e4eac0b7b8b6fd8ef0b0cc501986f7f0c3a78c4ec1dbb60\",\"dweb:/ipfs/QmXcHoVjCYWWCz4hm2KZ6JxtB4YNq7jmXa2evLkga59Xwq\"],\"license\":\"MIT\"},\"src/structs/JBSplitGroup.sol\":{\"keccak256\":\"0xda7da6e88aac2906c7ea4027660088daf217edc632bebca4d72795aae8921564\",\"urls\":[\"bzz-raw://ae1939d17e94cb51484f31ce64cf0df990445a338fb9b38d39a7baf28275ae4a\",\"dweb:/ipfs/QmUhPnJiWnYhFdtLvZnrPopAdbYXxETpGjvxjPDignpTGY\"],\"license\":\"MIT\"},\"src/structs/JBSplitHookContext.sol\":{\"keccak256\":\"0xfe34e6860b00ca93d71f44e72882281b2c57c31303151af05795c74cfdd2e51d\",\"urls\":[\"bzz-raw://08acab094888e9c929b6f6f972d89ddbb31e5867675e7e7c602d25fcb2c0f402\",\"dweb:/ipfs/QmPNdXM185cTyXQSodVr4JMviHx88jrWu7dipgkp9xTNgJ\"],\"license\":\"MIT\"},\"src/structs/JBTerminalConfig.sol\":{\"keccak256\":\"0x141b5d45c0b58dcddb1eeab34ec00c18c60415f8e594d1852c53e6f79dfe53ee\",\"urls\":[\"bzz-raw://ca995ea354eac6f5ebc8ef4fd5c8ece8c88698bac96da65c7aaa497a7bc0f582\",\"dweb:/ipfs/Qmf2BS1LHXtoQJuUYt4UisvYpA5dmieSq1gs51iQjNh2bw\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "0x1Eb7799d3A230A0440F0d6C477256Df8d425AdBb", + "0x0631183bd45c31F8645F9dCF8705951F730362E9" + ], + "bytecode": "0x60e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c63430008170033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e981565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb81565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb16906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da6001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb6001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e96001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e91690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project.", + "prices": "A contract that exposes price feeds.", + "rulesets": "A contract storing and managing project rulesets." + } + }, + "currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)": { + "details": "The returned amount in terms of the specified terminal's currency.The returned amount is represented as a fixed point number with the same amount of decimals as the specified terminal.", + "params": { + "accountingContexts": "The accounting contexts of tokens whose balances should contribute to the surplus being reclaimed from.", + "currency": "The currency that the resulting number will be in terms of.", + "decimals": "The number of decimals to include in the resulting fixed point number.", + "projectId": "The ID of the project to get the redeemable surplus amount for.", + "terminal": "The terminal the redeemable amount would come from.", + "tokenCount": "The number of tokens to make the calculation with, as a fixed point number with 18 decimals.", + "useTotalSurplus": "A flag indicating whether the surplus used in the calculation should be summed from all of the project's terminals. If false, surplus should be limited to the amount in the specified `terminal`." + }, + "returns": { + "_0": "The amount of surplus tokens that can be reclaimed by redeeming `tokenCount` tokens as a fixed point number with the specified number of decimals." + } + }, + "currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)": { + "params": { + "projectId": "The ID of the project to get the reclaimable surplus amount for.", + "surplus": "The surplus amount to make the calculation with, as a fixed point number.", + "tokenCount": "The number of tokens to make the calculation with, as a fixed point number with 18 decimals.", + "totalSupply": "The total number of tokens to make the calculation with, as a fixed point number with 18 decimals." + }, + "returns": { + "_0": "The surplus token amount that can be reclaimed, as a fixed point number with the same number of decimals as the provided `surplus`." + } + }, + "currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)": { + "details": "The surplus is the amount of funds a project has in a terminal in excess of its payout limit.The surplus is represented as a fixed point number with the same amount of decimals as the specified terminal.", + "params": { + "accountingContexts": "The accounting contexts of tokens whose balances should contribute to the surplus being calculated.", + "currency": "The currency the resulting amount should be in terms of.", + "decimals": "The number of decimals to expect in the resulting fixed point number.", + "projectId": "The ID of the project to get surplus for.", + "terminal": "The terminal the surplus is being calculated for." + }, + "returns": { + "_0": "The current surplus amount the project has in the specified terminal." + } + }, + "currentTotalSurplusOf(uint256,uint256,uint256)": { + "params": { + "currency": "The currency that the total surplus should be in terms of.", + "decimals": "The number of decimals that the fixed point surplus should include.", + "projectId": "The ID of the project to get the total surplus for." + }, + "returns": { + "_0": "The current total surplus amount that the project has across all terminals." + } + }, + "recordAddedBalanceFor(uint256,address,uint256)": { + "params": { + "amount": "The amount of terminal tokens added, as a fixed point number with the same amount of decimals as its relative terminal.", + "projectId": "The ID of the project which funds are being added to the balance of.", + "token": "The token being added to the balance." + } + }, + "recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)": { + "details": "Mints the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, mints tokens in proportion with the amount paid.", + "params": { + "amount": "The amount of tokens being paid. Includes the token being paid, their value, the number of decimals included, and the currency of the amount.", + "beneficiary": "The address that should be the beneficiary of anything the payment yields (including project tokens minted by the payment).", + "metadata": "Bytes to send to the data hook, if the project's current ruleset specifies one.", + "payer": "The address that made the payment to the terminal.", + "projectId": "The ID of the project being paid." + }, + "returns": { + "hookSpecifications": "A list of pay hooks, including data and amounts to send to them. The terminal should fulfill these specifications.", + "ruleset": "The ruleset the payment was made during, as a `JBRuleset` struct.", + "tokenCount": "The number of project tokens that were minted, as a fixed point number with 18 decimals." + } + }, + "recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)": { + "params": { + "accountingContext": "The context of the token being paid out.", + "amount": "The amount to pay out (use from the payout limit), as a fixed point number.", + "currency": "The currency of the `amount`. This must match the project's current ruleset's currency.", + "projectId": "The ID of the project that is paying out funds." + }, + "returns": { + "amountPaidOut": "The amount of terminal tokens paid out, as a fixed point number with the same amount of decimals as its relative terminal.", + "ruleset": "The ruleset the payout was made during, as a `JBRuleset` struct." + } + }, + "recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)": { + "details": "Redeems the project's tokens according to values provided by the ruleset's data hook. If the ruleset has no data hook, redeems tokens along a redemption bonding curve that is a function of the number of tokens being burned.", + "params": { + "accountingContext": "The accounting context of the token being reclaimed by the redemption.", + "balanceAccountingContexts": "The accounting contexts of the tokens whose balances should contribute to the surplus being reclaimed from.", + "holder": "The account that is redeeming tokens.", + "metadata": "Bytes to send to the data hook, if the project's current ruleset specifies one.", + "projectId": "The ID of the project being redeemed from.", + "redeemCount": "The number of project tokens to redeem, as a fixed point number with 18 decimals." + }, + "returns": { + "hookSpecifications": "A list of redeem hooks, including data and amounts to send to them. The terminal should fulfill these specifications.", + "reclaimAmount": "The amount of tokens reclaimed from the terminal, as a fixed point number with 18 decimals.", + "redemptionRate": "The redemption rate influencing the reclaim amount.", + "ruleset": "The ruleset during the redemption was made during, as a `JBRuleset` struct. This ruleset will have a redemption rate provided by the redemption hook if applicable." + } + }, + "recordTerminalMigration(uint256,address)": { + "params": { + "projectId": "The ID of the project being migrated.", + "token": "The token being migrated." + }, + "returns": { + "balance": "The project's current balance (which is being migrated), as a fixed point number with the same amount of decimals as its relative terminal." + } + }, + "recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)": { + "details": "When surplus allowance is \"used\", it is taken out of the project's surplus within a terminal.", + "params": { + "accountingContext": "The accounting context of the token whose balances should contribute to the surplus allowance being reclaimed from.", + "amount": "The amount to use from the surplus allowance, as a fixed point number.", + "currency": "The currency of the `amount`. Must match the currency of the surplus allowance.", + "projectId": "The ID of the project to use the surplus allowance of." + }, + "returns": { + "ruleset": "The ruleset during the surplus allowance is being used during, as a `JBRuleset` struct.", + "usedAmount": "The amount of terminal tokens used, as a fixed point number with the same amount of decimals as its relative terminal." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "PRICES()": { + "notice": "The contract that exposes price feeds." + }, + "RULESETS()": { + "notice": "The contract storing and managing project rulesets." + }, + "balanceOf(address,uint256,address)": { + "notice": "A project's balance of a specific token within a terminal." + }, + "currentReclaimableSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256,uint256,bool)": { + "notice": "The surplus amount that can currently be reclaimed from a terminal by redeeming the specified number of tokens, based on the total token supply and current surplus." + }, + "currentReclaimableSurplusOf(uint256,uint256,uint256,uint256)": { + "notice": "The current amount of surplus tokens from a terminal that can be reclaimed by redeeming the specified number of tokens, based on the specified total token supply and surplus amounts." + }, + "currentSurplusOf(address,uint256,(address,uint8,uint32)[],uint256,uint256)": { + "notice": "Gets the current surplus amount in a terminal for a specified project." + }, + "currentTotalSurplusOf(uint256,uint256,uint256)": { + "notice": "Gets the current surplus amount for a specified project across all terminals." + }, + "recordAddedBalanceFor(uint256,address,uint256)": { + "notice": "Records funds being added to a project's balance." + }, + "recordPaymentFrom(address,(address,uint256,uint256,uint256),uint256,address,bytes)": { + "notice": "Records a payment to a project." + }, + "recordPayoutFor(uint256,(address,uint8,uint32),uint256,uint256)": { + "notice": "Records a payout from a project." + }, + "recordRedemptionFor(address,uint256,uint256,(address,uint8,uint32),(address,uint8,uint32)[],bytes)": { + "notice": "Records a redemption from a project." + }, + "recordTerminalMigration(uint256,address)": { + "notice": "Records the migration of funds from this store." + }, + "recordUsedAllowanceOf(uint256,(address,uint8,uint32),uint256,uint256)": { + "notice": "Records a use of a project's surplus allowance." + }, + "usedPayoutLimitOf(address,uint256,address,uint256,uint256)": { + "notice": "The currency-denominated amount of funds that a project has already paid out from its payout limit during the current ruleset for each terminal, in terms of the payout limit's currency." + }, + "usedSurplusAllowanceOf(address,uint256,address,uint256,uint256)": { + "notice": "The currency-denominated amounts of funds that a project has used from its surplus allowance during the current ruleset for each terminal, in terms of the surplus allowance's currency." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBTerminalStore.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/JBTokens.json b/deployments/nana-core/sepolia/JBTokens.json new file mode 100644 index 00000000..038b02ef --- /dev/null +++ b/deployments/nana-core/sepolia/JBTokens.json @@ -0,0 +1,1087 @@ +{ + "_format": "sphinx-sol-ct-artifact-1", + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "contractName": "JBTokens", + "address": "0x3295C9c7374E583cb2e6Ed455EAf9908022159D0", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "directory", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DIRECTORY", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "burnFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimTokensFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "creditBalanceOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployERC20For", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mintFor", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "projectIdOf", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setTokenFor", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tokenOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IJBToken" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBalanceOf", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "balance", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalCreditSupplyOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupplyOf", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferCreditsFrom", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Burn", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "initialCreditBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "initialTokenBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ClaimTokens", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "initialCreditBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "beneficiary", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DeployERC20", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "indexed": true, + "internalType": "contract IJBToken" + }, + { + "name": "name", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "salt", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Mint", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "tokensWereClaimed", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SetToken", + "inputs": [ + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "newToken", + "type": "address", + "indexed": true, + "internalType": "contract IJBToken" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TransferCredits", + "inputs": [ + { + "name": "holder", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "projectId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "caller", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "CONTROLLER_UNAUTHORIZED", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_NAME", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_SYMBOL", + "inputs": [] + }, + { + "type": "error", + "name": "EMPTY_TOKEN", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_CREDITS", + "inputs": [] + }, + { + "type": "error", + "name": "INSUFFICIENT_FUNDS", + "inputs": [] + }, + { + "type": "error", + "name": "OVERFLOW_ALERT", + "inputs": [] + }, + { + "type": "error", + "name": "PROJECT_ALREADY_HAS_TOKEN", + "inputs": [] + }, + { + "type": "error", + "name": "RECIPIENT_ZERO_ADDRESS", + "inputs": [] + }, + { + "type": "error", + "name": "TOKENS_MUST_HAVE_18_DECIMALS", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_ALREADY_SET", + "inputs": [] + }, + { + "type": "error", + "name": "TOKEN_NOT_FOUND", + "inputs": [] + } + ], + "solcInputHash": "b2112d617c776ac2cceb92d11c578094", + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"directory\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"CONTROLLER_UNAUTHORIZED\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_NAME\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_SYMBOL\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"EMPTY_TOKEN\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_CREDITS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"INSUFFICIENT_FUNDS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"OVERFLOW_ALERT\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"PROJECT_ALREADY_HAS_TOKEN\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"RECIPIENT_ZERO_ADDRESS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKENS_MUST_HAVE_18_DECIMALS\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_ALREADY_SET\"},{\"inputs\":[],\"type\":\"error\",\"name\":\"TOKEN_NOT_FOUND\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"initialCreditBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"initialTokenBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Burn\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"initialCreditBalance\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ClaimTokens\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\",\"indexed\":false},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"DeployERC20\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"bool\",\"name\":\"tokensWereClaimed\",\"type\":\"bool\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Mint\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"contract IJBToken\",\"name\":\"newToken\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"SetToken\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\",\"indexed\":false}],\"type\":\"event\",\"name\":\"TransferCredits\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"DIRECTORY\",\"outputs\":[{\"internalType\":\"contract IJBDirectory\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"burnFrom\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"claimTokensFor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"creditBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"deployERC20For\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"mintFor\"},{\"inputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"projectIdOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"contract IJBToken\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setTokenFor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"tokenOf\",\"outputs\":[{\"internalType\":\"contract IJBToken\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalCreditSupplyOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"totalSupplyOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferCreditsFrom\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burnFrom(address,uint256,uint256)\":{\"details\":\"Credits are burned first, then tokens are burned.Only a project's current controller can burn its tokens.\",\"params\":{\"amount\":\"The amount of tokens to burn.\",\"holder\":\"The address that owns the tokens which are being burned.\",\"projectId\":\"The ID of the project to the burned tokens belong to.\"}},\"claimTokensFor(address,uint256,uint256,address)\":{\"details\":\"Only a project's controller can claim that project's tokens.\",\"params\":{\"amount\":\"The amount of tokens to claim.\",\"beneficiary\":\"The account into which the claimed tokens will go.\",\"holder\":\"The owner of the credits being redeemed.\",\"projectId\":\"The ID of the project whose tokens are being claimed.\"}},\"constructor\":{\"params\":{\"directory\":\"A contract storing directories of terminals and controllers for each project.\"}},\"deployERC20For(uint256,string,string,bytes32)\":{\"details\":\"Deploys a project's ERC-20 token contract.Only a project's controller can deploy its token.\",\"params\":{\"name\":\"The ERC-20's name.\",\"projectId\":\"The ID of the project to deploy an ERC-20 token for.\",\"symbol\":\"The ERC-20's symbol.\"},\"returns\":{\"token\":\"The address of the token that was deployed.\"}},\"mintFor(address,uint256,uint256)\":{\"details\":\"Only a project's current controller can mint its tokens.\",\"params\":{\"amount\":\"The amount of tokens to mint.\",\"holder\":\"The address receiving the new tokens.\",\"projectId\":\"The ID of the project to which the tokens belong.\"}},\"setTokenFor(uint256,address)\":{\"details\":\"Only a project's controller can set its token.\",\"params\":{\"projectId\":\"The ID of the project to set the token of.\",\"token\":\"The new token's address.\"}},\"totalBalanceOf(address,uint256)\":{\"params\":{\"holder\":\"The holder to get a balance for.\",\"projectId\":\"The project to get the `_holder`s balance for.\"},\"returns\":{\"balance\":\"The combined token and token credit balance of the `_holder\"}},\"totalSupplyOf(uint256)\":{\"params\":{\"projectId\":\"The ID of the project to get the total supply of.\"},\"returns\":{\"totalSupply\":\"The total supply of the project's tokens and token credits.\"}},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"details\":\"Only a project's controller can transfer credits for that project.\",\"params\":{\"amount\":\"The amount of credits to transfer.\",\"holder\":\"The address to transfer credits from.\",\"projectId\":\"The ID of the project whose credits are being transferred.\",\"recipient\":\"The recipient of the credits.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DIRECTORY()\":{\"notice\":\"The directory of terminals and controllers for projects.\"},\"burnFrom(address,uint256,uint256)\":{\"notice\":\"Burns (destroys) credits or tokens.\"},\"claimTokensFor(address,uint256,uint256,address)\":{\"notice\":\"Redeem credits to claim tokens into a holder's wallet.\"},\"creditBalanceOf(address,uint256)\":{\"notice\":\"Each holder's credit balance for each project.\"},\"deployERC20For(uint256,string,string,bytes32)\":{\"notice\":\"Deploys an ERC-20 token for a project. It will be used when claiming tokens.\"},\"mintFor(address,uint256,uint256)\":{\"notice\":\"Mint (create) new tokens or credits.\"},\"projectIdOf(address)\":{\"notice\":\"Each token's project.\"},\"setTokenFor(uint256,address)\":{\"notice\":\"Set a project's token if not already set.\"},\"tokenOf(uint256)\":{\"notice\":\"Each project's attached token contract.\"},\"totalBalanceOf(address,uint256)\":{\"notice\":\"The total balance a holder has for a specified project, including both tokens and token credits.\"},\"totalCreditSupplyOf(uint256)\":{\"notice\":\"The total supply of credits for each project.\"},\"totalSupplyOf(uint256)\":{\"notice\":\"The total supply for a specific project, including both tokens and token credits.\"},\"transferCreditsFrom(address,uint256,address,uint256)\":{\"notice\":\"Allows a holder to transfer credits to another account.\"}},\"version\":1}},\"settings\":{\"remappings\":[\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@gnosis.pm/=node_modules/@gnosis.pm/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solmate/=node_modules/solmate/\",\"sphinx-forge-std/=node_modules/sphinx-forge-std/\",\"sphinx-solmate/=node_modules/sphinx-solmate/\",\"sphinx/=lib/sphinx/\"],\"optimizer\":{\"enabled\":true,\"runs\":200},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"compilationTarget\":{\"src/JBTokens.sol\":\"JBTokens\"},\"evmVersion\":\"paris\",\"libraries\":{}},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947\",\"urls\":[\"bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856\",\"dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/governance/utils/Votes.sol\":{\"keccak256\":\"0xb8f69828d41b3594afd7a8c6393565901c205d8b5baf5bd2e42dbac637172979\",\"urls\":[\"bzz-raw://c790253821191ac46b2050d87df820d4209871f90c616381e2c2c00ff3eaac34\",\"dweb:/ipfs/QmcPETTyuZBzDRL39JNXj3SBMdx3Y9o4fPQLSZ27py5Jim\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol\":{\"keccak256\":\"0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818\",\"urls\":[\"bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a\",\"dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol\":{\"keccak256\":\"0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33\",\"urls\":[\"bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb\",\"dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee\",\"urls\":[\"bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2\",\"dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\":{\"keccak256\":\"0x2a650f6e593cfe5ff2e514a17ea7f593ee70cefa1888066bc983a6308acff4b1\",\"urls\":[\"bzz-raw://9a3477b9665a4b6d19f86bf2cfbfa8c08ba41193f15e68c0d75c0cab7e1fc753\",\"dweb:/ipfs/QmbcurrTatN1PBmkCWdrED8zhAqx5ah9Qp6uR8YwkKWA8V\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5ef46daa3b58ef2702279d514780316efaa952915ee1aa3396f041ee2982b0b4\",\"urls\":[\"bzz-raw://2f8f2a76e23b02fc69e8cd24c3cb47da6c7af3a2d6c3a382f8ac25c6e094ade7\",\"dweb:/ipfs/QmPV4ZS4tPVv4mTCf9ejyZ1ai57EEibDRj7mN2ARDCLV5n\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol\":{\"keccak256\":\"0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad\",\"urls\":[\"bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b\",\"dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR\"],\"license\":\"MIT\"},\"node_modules/@openzeppelin/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"],\"license\":\"MIT\"},\"src/JBERC20.sol\":{\"keccak256\":\"0x3eb0cb3239aad4ee290ae9dec692717b05cd545f55606586c62faae5db24a61b\",\"urls\":[\"bzz-raw://7eef767e6389d1f85ef3acf5d39f4057d84f72ddc3c3101a37794371c4fada7a\",\"dweb:/ipfs/QmSMQRHSbMLZFp4wtHvqXCig7F8EqhXeAX9UvDEHL8gRb3\"],\"license\":\"MIT\"},\"src/JBTokens.sol\":{\"keccak256\":\"0xf88db3b695af2d6e0b824aca8b694c9eb6d7304d39f1d2384bf75845ee08bb74\",\"urls\":[\"bzz-raw://2e060749b067ef6c0543f5f29c2ab4e6374eba5cc744a1602f7cddd58af0938b\",\"dweb:/ipfs/QmUMXHBjiKLQWgvroQkh6tEMKotD7LAG4R6wjviqRiJ52J\"],\"license\":\"MIT\"},\"src/abstract/JBControlled.sol\":{\"keccak256\":\"0xdbaab889d033617969b7e0b453564e8eb76acb54e65b22289fff6fac90599d64\",\"urls\":[\"bzz-raw://860d67885d8095d49694a5c6c933ff0ad048a3db72412412b04e6b14c0fc8c59\",\"dweb:/ipfs/QmRHV7RdjwbQHtjpUxhNgnWzzES5X9duVTUPtCnJYrvjjc\"],\"license\":\"MIT\"},\"src/interfaces/IJBControlled.sol\":{\"keccak256\":\"0x79fb8de7b3f809f1c3c7189f578b7331ec4dfe3350151d5b50240ecb3a2a907b\",\"urls\":[\"bzz-raw://45c82240dd4f0e9aec00d0d86f6b44bdda231db098ebdac17e922771b3e6f342\",\"dweb:/ipfs/QmPUvT8HZeVenrZDpP14HsZofaXPJjih8UAd35rTg3tU7E\"],\"license\":\"MIT\"},\"src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xd15957cc32974cde4f9f194b92574df2ad8a7aeec049d947136ce3381f9145f6\",\"urls\":[\"bzz-raw://7543e5cbde75ff777b16067016ff9ac5e995752842f03662137eb4ef3fc3c868\",\"dweb:/ipfs/QmPJZAmqNKRcj1JQ4Kc9hExbMtPPzrRB5hZ787utCfBmXg\"],\"license\":\"MIT\"},\"src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0xe24aa2ca52f7a5f24f24ccae101cfc94d0f76705b2d23222f87c7852f8be4267\",\"urls\":[\"bzz-raw://6888140e9a7d4156fd22635654d5d08e21819af8b0356b5415f37b75083b3eb9\",\"dweb:/ipfs/QmbuwBNhar7rEbRhTJPiyo5PVsfaM5nqLow9NAkHhyvjV5\"],\"license\":\"MIT\"},\"src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x85539f72c5871c53a919edc7db78931155464e9e00fccd30079b17e75820ddb9\",\"urls\":[\"bzz-raw://505466dbfbdeec77f948ce065676897a5b4a74b70bb234c1053b893c4849f3a1\",\"dweb:/ipfs/QmYBpZQub3Mv19xsRWqvzgiQSBAp4UNaKcqWQ2wwH62H95\"],\"license\":\"MIT\"},\"src/interfaces/IJBToken.sol\":{\"keccak256\":\"0x911c93ec0053c1ce3c3a82ddefc8a2911f244b159b1b88fa2a7697b5455d67e0\",\"urls\":[\"bzz-raw://a29b34338ffe4310d6fa012cce351a8db98ad84dac40b6886fcbaa76145eefb2\",\"dweb:/ipfs/QmctiW2p99TaZLGBnavS3gE89p2KFoPfCPPpPvZDXsyMq9\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"],\"license\":\"MIT\"},\"src/interfaces/IJBTokens.sol\":{\"keccak256\":\"0xbbb3764d6b9d253f7a2b4e13636bf1d523d72be87b144dea6bbd7177b0953ffe\",\"urls\":[\"bzz-raw://417cdba44cf58c833785ec180918d297fcda2539d8476a978cd7d1d39c4b33d2\",\"dweb:/ipfs/QmSewvgMsjqS2fek8LXc4dNGBKhX6odnyNpzr9UmDX3WXE\"],\"license\":\"MIT\"},\"src/interfaces/terminal/IJBTerminal.sol\":{\"keccak256\":\"0x36f23bc27e56fa86d100281a75f5a6ce73f39f32e6a1667ce69f902da1d005ee\",\"urls\":[\"bzz-raw://e8ffa2e264fa12444799cb5706ca577034f3f8be9ff7a2f072981de6a61d706d\",\"dweb:/ipfs/QmR6gQDymvk8JQ77J8VxpFD1Hnxga4w7LLiRvAT3m4LG6T\"],\"license\":\"MIT\"},\"src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x2907ff54d1e903cc7e0390dd88c3975884702dc2673642aacbe22b66560b56de\",\"urls\":[\"bzz-raw://a66a5381ce877b32f0e0058ceeaf843e9b6b2bc8af666c0c9f4a9d01091da004\",\"dweb:/ipfs/QmQynCetUr37dBkS1YwDS8evxuXGiqanW6THmeUxXtim8w\"],\"license\":\"MIT\"},\"src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0xd26c3a774ff38be79064085970454fe2603a23a638c76270d5b1b3829206c3e8\",\"urls\":[\"bzz-raw://3b55dbe3bf1ef625b7ca04efab3de35406e6041d5b3d82c7265469c500e2b702\",\"dweb:/ipfs/QmUdBDo4Lt3mcsFcsXT2mqq3czFwZjQJFPLM89YA2VtD7k\"],\"license\":\"MIT\"},\"src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0x5cf0626b73a596c1e2da17c89ae039a7c0374310b060d48568d3b6c11fbe6180\",\"urls\":[\"bzz-raw://63348b50be95e2995409394a17caffc563a646f0972650a1230bf864fbd3219b\",\"dweb:/ipfs/QmZXZpS3SbFD5nWaCauf6AqbEhLURv5qsKHpThBvQgDU6u\"],\"license\":\"MIT\"}},\"version\":1}", + "args": [ + "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA" + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c63430008170033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da81565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da1690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "burnFrom(address,uint256,uint256)": { + "details": "Credits are burned first, then tokens are burned.Only a project's current controller can burn its tokens.", + "params": { + "amount": "The amount of tokens to burn.", + "holder": "The address that owns the tokens which are being burned.", + "projectId": "The ID of the project to the burned tokens belong to." + } + }, + "claimTokensFor(address,uint256,uint256,address)": { + "details": "Only a project's controller can claim that project's tokens.", + "params": { + "amount": "The amount of tokens to claim.", + "beneficiary": "The account into which the claimed tokens will go.", + "holder": "The owner of the credits being redeemed.", + "projectId": "The ID of the project whose tokens are being claimed." + } + }, + "constructor": { + "params": { + "directory": "A contract storing directories of terminals and controllers for each project." + } + }, + "deployERC20For(uint256,string,string,bytes32)": { + "details": "Deploys a project's ERC-20 token contract.Only a project's controller can deploy its token.", + "params": { + "name": "The ERC-20's name.", + "projectId": "The ID of the project to deploy an ERC-20 token for.", + "symbol": "The ERC-20's symbol." + }, + "returns": { + "token": "The address of the token that was deployed." + } + }, + "mintFor(address,uint256,uint256)": { + "details": "Only a project's current controller can mint its tokens.", + "params": { + "amount": "The amount of tokens to mint.", + "holder": "The address receiving the new tokens.", + "projectId": "The ID of the project to which the tokens belong." + } + }, + "setTokenFor(uint256,address)": { + "details": "Only a project's controller can set its token.", + "params": { + "projectId": "The ID of the project to set the token of.", + "token": "The new token's address." + } + }, + "totalBalanceOf(address,uint256)": { + "params": { + "holder": "The holder to get a balance for.", + "projectId": "The project to get the `_holder`s balance for." + }, + "returns": { + "balance": "The combined token and token credit balance of the `_holder" + } + }, + "totalSupplyOf(uint256)": { + "params": { + "projectId": "The ID of the project to get the total supply of." + }, + "returns": { + "totalSupply": "The total supply of the project's tokens and token credits." + } + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "details": "Only a project's controller can transfer credits for that project.", + "params": { + "amount": "The amount of credits to transfer.", + "holder": "The address to transfer credits from.", + "projectId": "The ID of the project whose credits are being transferred.", + "recipient": "The recipient of the credits." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "DIRECTORY()": { + "notice": "The directory of terminals and controllers for projects." + }, + "burnFrom(address,uint256,uint256)": { + "notice": "Burns (destroys) credits or tokens." + }, + "claimTokensFor(address,uint256,uint256,address)": { + "notice": "Redeem credits to claim tokens into a holder's wallet." + }, + "creditBalanceOf(address,uint256)": { + "notice": "Each holder's credit balance for each project." + }, + "deployERC20For(uint256,string,string,bytes32)": { + "notice": "Deploys an ERC-20 token for a project. It will be used when claiming tokens." + }, + "mintFor(address,uint256,uint256)": { + "notice": "Mint (create) new tokens or credits." + }, + "projectIdOf(address)": { + "notice": "Each token's project." + }, + "setTokenFor(uint256,address)": { + "notice": "Set a project's token if not already set." + }, + "tokenOf(uint256)": { + "notice": "Each project's attached token contract." + }, + "totalBalanceOf(address,uint256)": { + "notice": "The total balance a holder has for a specified project, including both tokens and token credits." + }, + "totalCreditSupplyOf(uint256)": { + "notice": "The total supply of credits for each project." + }, + "totalSupplyOf(uint256)": { + "notice": "The total supply for a specific project, including both tokens and token credits." + }, + "transferCreditsFrom(address,uint256,address,uint256)": { + "notice": "Allows a holder to transfer credits to another account." + } + }, + "version": 1 + }, + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "sourceName": "src/JBTokens.sol", + "chainId": "11155111", + "linkReferences": {}, + "deployedLinkReferences": {}, + "history": [] +} \ No newline at end of file diff --git a/deployments/nana-core/sepolia/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json b/deployments/nana-core/sepolia/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json new file mode 100644 index 00000000..885eceee --- /dev/null +++ b/deployments/nana-core/sepolia/execution/58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741.json @@ -0,0 +1,2005 @@ +{ + "_format": "sphinx-sol-execution-artifact-1", + "transactions": [ + { + "receipt": { + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "contractAddress": null, + "cumulativeGasUsed": "8674471", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1010639762", + "gasUsed": "392352", + "hash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "index": 61, + "logs": [ + { + "address": "0x8f3301c9Eada5642B5bB12FD047D3EBb2932E619", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x", + "index": 52, + "topics": [ + "0x0b28c2323855bc15db8c13b56a44651fbce72c8c916fd653f08851fb9ab1c62a", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 53, + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "index": 54, + "topics": [ + "0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e7761000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d", + "index": 55, + "topics": [ + "0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", + "0x000000000000000000000000a6b71e26c5e0845f74c812102ca7114b6a896ab2" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + }, + { + "address": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee709552", + "index": 56, + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + } + ], + "logsBloom": "0x00000000000000000008000000000040800000400000000000000000000000000060008000000000000000000004000000000000000000000000000040000000000010000000000400000000000000000000000000000008004200200040000000000000000000000500000000000000000000100000000000000000000000000001010000000000000000000001000000000000000080000000800000000000000000000000000000000000000400000000000000000000000000200002000000000000000000200000000000041000000000000000000000000000000000000000080000001004000000400000000020000000000000100000000000000000", + "status": 1, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2" + }, + "response": { + "accessList": [], + "blockNumber": 5424376, + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "chainId": "11155111", + "data": "0x1688f0b9000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee7095520000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4b63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "400916", + "gasPrice": "1010639762", + "hash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "maxFeePerGas": "1019661374", + "maxPriorityFeePerGas": "1000000000", + "nonce": 154, + "signature": { + "networkV": null, + "r": "0x671da71086b1c21aec7e12f999a2db121bebb5d714bfe2b7ecfee0455744b382", + "s": "0x4a93a66aad778817c5a0e45fde15db3d0462f2d22641a8814175aa32c50fecc5", + "v": 27 + }, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "contractAddress": null, + "cumulativeGasUsed": "8674471", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1010639762", + "gasUsed": "392352", + "hash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "index": 61, + "logs": [ + { + "address": "0x8f3301c9Eada5642B5bB12FD047D3EBb2932E619", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x", + "index": 52, + "topics": [ + "0x0b28c2323855bc15db8c13b56a44651fbce72c8c916fd653f08851fb9ab1c62a", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 53, + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "index": 54, + "topics": [ + "0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e7761000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d", + "index": 55, + "topics": [ + "0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8", + "0x000000000000000000000000a6b71e26c5e0845f74c812102ca7114b6a896ab2" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + }, + { + "address": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "blockNumber": 5424376, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee709552", + "index": 56, + "topics": [ + "0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235" + ], + "transactionHash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "transactionIndex": 61 + } + ], + "logsBloom": "0x00000000000000000008000000000040800000400000000000000000000000000060008000000000000000000004000000000000000000000000000040000000000010000000000400000000000000000000000000000008004200200040000000000000000000000500000000000000000000100000000000000000000000000001010000000000000000000001000000000000000080000000800000000000000000000000000000000000000400000000000000000000000000200002000000000000000000200000000000041000000000000000000000000000000000000000080000001004000000400000000020000000000000100000000000000000", + "status": 1, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2" + }, + "response": { + "accessList": [], + "blockNumber": 5424376, + "blockHash": "0xbf581aefac3bbeb769dfba0ff1011cf7fea337ef7ad7593bb74659ff59919705", + "chainId": "11155111", + "data": "0x1688f0b9000000000000000000000000d9db270c1b5e3bd161e8c8503c55ceabee7095520000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4b63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "400916", + "gasPrice": "1010639762", + "hash": "0xd9ec7bde94c4e10a19b694eacb3af1d9e3b753f342cf7d8a74cda82a3a4fa03a", + "maxFeePerGas": "1019661374", + "maxPriorityFeePerGas": "1000000000", + "nonce": 154, + "signature": { + "networkV": null, + "r": "0x671da71086b1c21aec7e12f999a2db121bebb5d714bfe2b7ecfee0455744b382", + "s": "0x4a93a66aad778817c5a0e45fde15db3d0462f2d22641a8814175aa32c50fecc5", + "v": 27 + }, + "to": "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x888ad5fc4eb6be3746a858e4e74108c31f338e6f4a8e94ae819e849133fae127", + "blockNumber": 5424378, + "contractAddress": null, + "cumulativeGasUsed": "9701550", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1011404230", + "gasUsed": "219828", + "hash": "0x896b00246f9cf7588c82f37f63388b8308534fa2348e74e52452fa1267c001fc", + "index": 51, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x888ad5fc4eb6be3746a858e4e74108c31f338e6f4a8e94ae819e849133fae127", + "blockNumber": 5424378, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 74, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x0862b23c55a626eb017a2d6b572e84ac69c5c3a5e9aada6d3b39bae1a1ff580e" + ], + "transactionHash": "0x896b00246f9cf7588c82f37f63388b8308534fa2348e74e52452fa1267c001fc", + "transactionIndex": 51 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x888ad5fc4eb6be3746a858e4e74108c31f338e6f4a8e94ae819e849133fae127", + "blockNumber": 5424378, + "data": "0x000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c7000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "index": 75, + "topics": [ + "0x382c7aec02462c9b086aba9a7f8dbb1fb8bf336e7b624b0149eeca6726d0fb4a", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "transactionHash": "0x896b00246f9cf7588c82f37f63388b8308534fa2348e74e52452fa1267c001fc", + "transactionIndex": 51 + } + ], + "logsBloom": "0x00000000080000000000000000000000000000000008000000000000004000000040008000000000000000000040000000000000000000000000000000000000004000000000000000000008000000000000000020000000000000100000000000000000020000000000000000000800000000000000000000000008000000000001000000000000000100000000000000000000000000000000800000000000004000000010000000000000000000020080000000000000000000000002000002000000000000200000000008000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 5424378, + "blockHash": "0x888ad5fc4eb6be3746a858e4e74108c31f338e6f4a8e94ae819e849133fae127", + "chainId": "11155111", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003a48f38f83558025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e80246474100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c700000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063477a675eb072b8d7290c14fdea8cf33259ea0c3463bf3a62b729628dc85b505e39b100ada57f41bbdbbc96c5a522a173468be8abe109d92fffc413622c071fe56dc19f469e0aad1b0a5b93060f06475f728578cfd1f0592345f547ed2dec15cc3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004121633c363dd8a0f18d8991d070eb702210b013c33baaacd3ff4997347952e4b35329ea8ae6d1ae6fd305f94cd191bbdc99251e3bae89a0e540376e1bdcc17f991b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "230283", + "gasPrice": "1011404230", + "hash": "0x896b00246f9cf7588c82f37f63388b8308534fa2348e74e52452fa1267c001fc", + "maxFeePerGas": "1023661360", + "maxPriorityFeePerGas": "1000000000", + "nonce": 155, + "signature": { + "networkV": null, + "r": "0xc61e3a023c30329d6fa50240ebb80f3232e2f7ee74f559e4f0d9bbda041063f9", + "s": "0x337bda7b26cf3dc294ea1c82bb42383024cba08f20499006dc8925acf5351ef1", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x888ad5fc4eb6be3746a858e4e74108c31f338e6f4a8e94ae819e849133fae127", + "blockNumber": 5424378, + "contractAddress": null, + "cumulativeGasUsed": "9701550", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1011404230", + "gasUsed": "219828", + "hash": "0x896b00246f9cf7588c82f37f63388b8308534fa2348e74e52452fa1267c001fc", + "index": 51, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x888ad5fc4eb6be3746a858e4e74108c31f338e6f4a8e94ae819e849133fae127", + "blockNumber": 5424378, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 74, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x0862b23c55a626eb017a2d6b572e84ac69c5c3a5e9aada6d3b39bae1a1ff580e" + ], + "transactionHash": "0x896b00246f9cf7588c82f37f63388b8308534fa2348e74e52452fa1267c001fc", + "transactionIndex": 51 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x888ad5fc4eb6be3746a858e4e74108c31f338e6f4a8e94ae819e849133fae127", + "blockNumber": 5424378, + "data": "0x000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c7000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "index": 75, + "topics": [ + "0x382c7aec02462c9b086aba9a7f8dbb1fb8bf336e7b624b0149eeca6726d0fb4a", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "transactionHash": "0x896b00246f9cf7588c82f37f63388b8308534fa2348e74e52452fa1267c001fc", + "transactionIndex": 51 + } + ], + "logsBloom": "0x00000000080000000000000000000000000000000008000000000000004000000040008000000000000000000040000000000000000000000000000000000000004000000000000000000008000000000000000020000000000000100000000000000000020000000000000000000800000000000000000000000008000000000001000000000000000100000000000000000000000000000000800000000000004000000010000000000000000000020080000000000000000000000002000002000000000000200000000008000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 5424378, + "blockHash": "0x888ad5fc4eb6be3746a858e4e74108c31f338e6f4a8e94ae819e849133fae127", + "chainId": "11155111", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003a48f38f83558025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e80246474100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000b5e96127d417b1b3ef8438496a38a143167209c700000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063477a675eb072b8d7290c14fdea8cf33259ea0c3463bf3a62b729628dc85b505e39b100ada57f41bbdbbc96c5a522a173468be8abe109d92fffc413622c071fe56dc19f469e0aad1b0a5b93060f06475f728578cfd1f0592345f547ed2dec15cc3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004121633c363dd8a0f18d8991d070eb702210b013c33baaacd3ff4997347952e4b35329ea8ae6d1ae6fd305f94cd191bbdc99251e3bae89a0e540376e1bdcc17f991b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "230283", + "gasPrice": "1011404230", + "hash": "0x896b00246f9cf7588c82f37f63388b8308534fa2348e74e52452fa1267c001fc", + "maxFeePerGas": "1023661360", + "maxPriorityFeePerGas": "1000000000", + "nonce": 155, + "signature": { + "networkV": null, + "r": "0xc61e3a023c30329d6fa50240ebb80f3232e2f7ee74f559e4f0d9bbda041063f9", + "s": "0x337bda7b26cf3dc294ea1c82bb42383024cba08f20499006dc8925acf5351ef1", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 5424380, + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "chainId": "11155111", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000d604e65ec46d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000000000000000000000000000000000000000003b40000000000000000000000000000000000000000000000000000000000000552000000000000000000000000000000000000000000000000000000000000066800000000000000000000000000000000000000000000000000000000000008300000000000000000000000000000000000000000000000000000000000000c2e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e1410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002242e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002446b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d90519000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005dee7ec3cc8e235c3bf2d2c66dee68249ceecb9a94e2c8aacf95a434c28645d11b0f896c642c40bcea7a850947fc4df631eda3b84e16a66a8464900ad5ee21a2cf7d8432a4c273b2f9f2958696c496ffe99a4423eb22a5b66da411466170a294a88e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000009600000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084f3700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000008644c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c6343000817003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e9c60e98795a0f50e6a62729e5f16c61e3d488abdbfd6333223f65f7337297119b909f840340ffb9c153c81e5ffc60af9d0b638bf25aee24eed2bb1f356eee7ce935db24b93a61d7c18faf88f873d70cdb27c5fc09ecbf39f8b09035aefb824dd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000002ba00000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000223fdc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000029c44c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062e6b517276fa194dbc03e6081885c14d9393d9e098d6747e5035c76a1aeda912e39b100ada57f41bbdbbc96c5a522a173468be8abe109d92fffc413622c071fe56dc19f469e0aad1b0a5b93060f06475f728578cfd1f0592345f547ed2dec15cc3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000018200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000017244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006774405404bacab0e545b5a4f494b616d0645ff952d02a94fb0b7450647cc531d29b3abeab66d247eea6d9f85e59b31c5a20edc32426b215e4dc7f152ddf495f3d62764ed7964a47341d5a4d5ec7d0c91f71f52e24969cf1e2d2dcf1c0689955b16ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000010a00000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000fc00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dcc2d00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000ec44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d2d4314d5be943fe2438db8b649fc1adffd432092bcfa17516ef8959f61c1ff461968e3d2403a0c672729a94da9858d3834e8f17aba33a072c6984d17dffddc3f7d8432a4c273b2f9f2958696c496ffe99a4423eb22a5b66da411466170a294a88e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017d9ea00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000019e44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f709282c1f63f0ea9b2622874fb26ccfff41fe23d41158b4bc0b86136235ed11d069b6092816baec20d158c20b22ecba5d55f9839b2f0fd334477a3441e0992abbbab8b5ff6c24ebbd3a3c1510a41a3cc711bdf55b68443f8f4fbb1b853921bdd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003e400000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000377dab00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000003d444c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd1b8d91f432c90c27dbe4bfd0f4781e95e831e27113e1d764fea3f4b2b9f0ce0fa9799aff775bd9938c9384df110d4be252786b2dfdadcdb63626a2865091b9bbbab8b5ff6c24ebbd3a3c1510a41a3cc711bdf55b68443f8f4fbb1b853921bdd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae444000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000011200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e971800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010244c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068e1c11058cdf5006eb66dc4ae266b8abe5f11d8f762b767441c5360b3969f676fff8c04aba0faff79c6f997eb37d5e8cbc53cee8dee9736ff9da412f4bb2a887d0bc94d0eb6bee02c49ce7f1881993dc4e08bdfb6aa4e3b2aee1014a9cda04d5dd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "11476492", + "gasPrice": "1012207646", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "maxFeePerGas": "1022020488", + "maxPriorityFeePerGas": "1000000000", + "nonce": 156, + "signature": { + "networkV": null, + "r": "0x6c232b15894c33b2ac8a5acd788ea1253bc3243262da44c852dfeeea6d3dc108", + "s": "0x2a10ae4decc1808b6165014fa0443d963fcbd2ea94f273420d233a8747b2ef02", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "contractAddress": null, + "cumulativeGasUsed": "24376581", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1012207646", + "gasUsed": "10946934", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "index": 89, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 146, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x382284f5d783cda733be9c0662007769be4127911b33bf59cf0fc970f0906943" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 147, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "index": 148, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe6", + "index": 149, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 150, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000002", + "index": 151, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x4d9207aBEcA883161A1eAee9DaBeDC0001c198d7", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 152, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7", + "index": 153, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 154, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000003", + "index": 155, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 156, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x00000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da", + "index": 157, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 158, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000004", + "index": 159, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5", + "index": 160, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 161, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000005", + "index": 162, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb", + "index": 163, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 164, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000006", + "index": 165, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d0", + "index": 166, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 167, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000007", + "index": 168, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b", + "index": 169, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x", + "index": 170, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "blockNumber": 5424380, + "data": "0x0000000000000000000000000000000000000000000000000000000000000008", + "index": 171, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "transactionIndex": 89 + } + ], + "logsBloom": "0x00000000080010008208000000080000000000000008000000800000004000000060008000000000000000000040000000000000000000000000000000000000000000000000200400000008820000000001000020000000000200000000000000000000020000000000000000000800000000100020000000000008000000400001000200000000000100800000000000080000000000000000804000000000004000080010000000002000000000020200000000400080000000000006000080000000000000200080000008000000000000000000000000000000000020000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 5424380, + "blockHash": "0x16052471b9ac7e9479f3215906569bb1ea5bef1c2e1f4d933dac32f884627b01", + "chainId": "11155111", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000d604e65ec46d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000000000000000000000000000000000000000003b40000000000000000000000000000000000000000000000000000000000000552000000000000000000000000000000000000000000000000000000000000066800000000000000000000000000000000000000000000000000000000000008300000000000000000000000000000000000000000000000000000000000000c2e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e1410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002242e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002446b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d90519000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005dee7ec3cc8e235c3bf2d2c66dee68249ceecb9a94e2c8aacf95a434c28645d11b0f896c642c40bcea7a850947fc4df631eda3b84e16a66a8464900ad5ee21a2cf7d8432a4c273b2f9f2958696c496ffe99a4423eb22a5b66da411466170a294a88e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000009600000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084f3700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000008644c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c6343000817003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e9c60e98795a0f50e6a62729e5f16c61e3d488abdbfd6333223f65f7337297119b909f840340ffb9c153c81e5ffc60af9d0b638bf25aee24eed2bb1f356eee7ce935db24b93a61d7c18faf88f873d70cdb27c5fc09ecbf39f8b09035aefb824dd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000002ba00000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000223fdc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000029c44c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062e6b517276fa194dbc03e6081885c14d9393d9e098d6747e5035c76a1aeda912e39b100ada57f41bbdbbc96c5a522a173468be8abe109d92fffc413622c071fe56dc19f469e0aad1b0a5b93060f06475f728578cfd1f0592345f547ed2dec15cc3f7171e5f4b452cf44d5170fd8efb4e58253dd0768775b5cfbee5814807460119a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000018200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014a08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000017244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006774405404bacab0e545b5a4f494b616d0645ff952d02a94fb0b7450647cc531d29b3abeab66d247eea6d9f85e59b31c5a20edc32426b215e4dc7f152ddf495f3d62764ed7964a47341d5a4d5ec7d0c91f71f52e24969cf1e2d2dcf1c0689955b16ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000010a00000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000fc00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dcc2d00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000ec44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d2d4314d5be943fe2438db8b649fc1adffd432092bcfa17516ef8959f61c1ff461968e3d2403a0c672729a94da9858d3834e8f17aba33a072c6984d17dffddc3f7d8432a4c273b2f9f2958696c496ffe99a4423eb22a5b66da411466170a294a88e057ff4d63677d1e5650b5ce5cddc814a8aeb55f19e41dc779edcb9996c85e63d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017d9ea00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000019e44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f709282c1f63f0ea9b2622874fb26ccfff41fe23d41158b4bc0b86136235ed11d069b6092816baec20d158c20b22ecba5d55f9839b2f0fd334477a3441e0992abbbab8b5ff6c24ebbd3a3c1510a41a3cc711bdf55b68443f8f4fbb1b853921bdd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003e400000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000377dab00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000003d444c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd1b8d91f432c90c27dbe4bfd0f4781e95e831e27113e1d764fea3f4b2b9f0ce0fa9799aff775bd9938c9384df110d4be252786b2dfdadcdb63626a2865091b9bbbab8b5ff6c24ebbd3a3c1510a41a3cc711bdf55b68443f8f4fbb1b853921bdd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae444000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000011200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e971800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010244c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068e1c11058cdf5006eb66dc4ae266b8abe5f11d8f762b767441c5360b3969f676fff8c04aba0faff79c6f997eb37d5e8cbc53cee8dee9736ff9da412f4bb2a887d0bc94d0eb6bee02c49ce7f1881993dc4e08bdfb6aa4e3b2aee1014a9cda04d5dd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "11476492", + "gasPrice": "1012207646", + "hash": "0x19bc5315bba2caaac4e6e9a41cf902def8a609aaca80787f6e96f6f41bbd4439", + "maxFeePerGas": "1022020488", + "maxPriorityFeePerGas": "1000000000", + "nonce": 156, + "signature": { + "networkV": null, + "r": "0x6c232b15894c33b2ac8a5acd788ea1253bc3243262da44c852dfeeea6d3dc108", + "s": "0x2a10ae4decc1808b6165014fa0443d963fcbd2ea94f273420d233a8747b2ef02", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "contractAddress": null, + "cumulativeGasUsed": "16393579", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1014514380", + "gasUsed": "9789398", + "hash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "index": 60, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 67, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x6daf75799cd1798b187fd5ba7fad6ef446eee635c5906fc027f3e7704902c8f0" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 68, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 69, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 70, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 71, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 72, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 73, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 74, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 75, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 76, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 77, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 78, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 79, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 80, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 81, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 82, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 83, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 84, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 85, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 86, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 87, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + } + ], + "logsBloom": "0x00000010080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040800000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000000000000000100800000000200000000000000000000804000000020004000081010000000000000000000020208c00000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 5424382, + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "chainId": "11155111", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000bd04e65ec46d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000006320000000000000000000000000000000000000000000000000000000000000662000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000007960000000000000000000000000000000000000000000000000000000000000b540000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000061800000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000060a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053a10400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005fa44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067dea9a489f84f60d8f7a62f9bcb2c6ce02d7f7ecb666694559313bb3475fecfc4124d7d417e9ac8830c0ab01fbf72b05d6aa42a6e71b947621eafe446a38300aa08cd00ffc4d313f27520cd78e992e7e6468e2d580b928f044a57249d3baeb5216ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cfa00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000044a1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000684573785fc014514153edd41ff2b8f0ba385265e376719ed7ef51fd5fb1c8a60fff8c04aba0faff79c6f997eb37d5e8cbc53cee8dee9736ff9da412f4bb2a887d0bc94d0eb6bee02c49ce7f1881993dc4e08bdfb6aa4e3b2aee1014a9cda04d5dd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001058200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000024f2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062c890c2f53885df3ad80b0b8287369d6943bf89312e322030dbdd5a5d91e4e2d36e3fde06121457b0a43a8cfe7db52672c8b977d0b9bdcc94e7ace57c7d4ac48eb6ed4dcd1f1a75d90de282384be8e0806409ddf08a79ef0a7944116e84b7426d260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfac700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000dc44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fe433e6a967a74d2f34314dfcc1c6b4cc351007dfec9dc892dd9040ec901bb620fa9799aff775bd9938c9384df110d4be252786b2dfdadcdb63626a2865091b9bbbab8b5ff6c24ebbd3a3c1510a41a3cc711bdf55b68443f8f4fbb1b853921bdd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003a200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033647400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000039244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d977832cd7123db40f08363f7221ebfa6f103141721bfaf39606a3340dea519ac6998c36b76ea1aadaad92f866a9563902a40bc725678156380d140bbd7d294eb6ed4dcd1f1a75d90de282384be8e0806409ddf08a79ef0a7944116e84b7426d260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004e44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e28034fee2653f608c76c6ce8dd89e4de7902d25e60a81b83f0198fa793d71459b909f840340ffb9c153c81e5ffc60af9d0b638bf25aee24eed2bb1f356eee7ce935db24b93a61d7c18faf88f873d70cdb27c5fc09ecbf39f8b09035aefb824dd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "10419347", + "gasPrice": "1014514380", + "hash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "maxFeePerGas": "1026590846", + "maxPriorityFeePerGas": "1000000000", + "nonce": 157, + "signature": { + "networkV": null, + "r": "0x8af2eaca0102ea0f7ece8157190aeb9096f0544fb9ce33abaafbd6f0c4e7ef5e", + "s": "0x039bf8398e80280043263afa5c80ef71d2170c8bcc7c954574ef718c5b4a4fda", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "contractAddress": null, + "cumulativeGasUsed": "16393579", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1014514380", + "gasUsed": "9789398", + "hash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "index": 60, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 67, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0x6daf75799cd1798b187fd5ba7fad6ef446eee635c5906fc027f3e7704902c8f0" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "index": 68, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 69, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000000000000000000000000000000000000000009", + "index": 70, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "index": 71, + "topics": [ + "0x11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab", + "0x000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 72, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000a", + "index": 73, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 74, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 75, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000b", + "index": 76, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x0631183bd45c31F8645F9dCF8705951F730362E9", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 77, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e9", + "index": 78, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 79, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000c", + "index": 80, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312", + "index": 81, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 82, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000d", + "index": 83, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEe80091E7c8E7C9764Ad8ccc94F978B15d7cc841", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 84, + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841", + "index": 85, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x", + "index": 86, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "blockNumber": 5424382, + "data": "0x000000000000000000000000000000000000000000000000000000000000000e", + "index": 87, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "transactionIndex": 60 + } + ], + "logsBloom": "0x00000010080010008008000000080000000000000008000000800000004000000060008000000000000000000040000080000000000100000000000000040800000000000000200400000008820000000001000020040000000200000000000000020000020000000000000000000800000000100021000000000008000000400001000000000000000100800000000200000000000000000000804000000020004000081010000000000000000000020208c00000000080000000000006000000000000000000200080000008000000000000000000040000000002000060000000000000000004000000000000000200000000000000000000000000000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 5424382, + "blockHash": "0x2bf24714ce26de950e7b1e43566cfa923f9ca3cef0cecf7a9193e1a6543c9a76", + "chainId": "11155111", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000bd04e65ec46d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000006320000000000000000000000000000000000000000000000000000000000000662000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000007960000000000000000000000000000000000000000000000000000000000000b540000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000061800000000000000000000000000000000000000000000000000000000000aa36a700000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000060a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053a10400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005fa44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067dea9a489f84f60d8f7a62f9bcb2c6ce02d7f7ecb666694559313bb3475fecfc4124d7d417e9ac8830c0ab01fbf72b05d6aa42a6e71b947621eafe446a38300aa08cd00ffc4d313f27520cd78e992e7e6468e2d580b928f044a57249d3baeb5216ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015cfa00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000044a1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed582000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000684573785fc014514153edd41ff2b8f0ba385265e376719ed7ef51fd5fb1c8a60fff8c04aba0faff79c6f997eb37d5e8cbc53cee8dee9736ff9da412f4bb2a887d0bc94d0eb6bee02c49ce7f1881993dc4e08bdfb6aa4e3b2aee1014a9cda04d5dd930bfdede22a19acf2504f234085d9c49bf885777c9d5dd5296988ffa13291e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001058200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000024f2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062c890c2f53885df3ad80b0b8287369d6943bf89312e322030dbdd5a5d91e4e2d36e3fde06121457b0a43a8cfe7db52672c8b977d0b9bdcc94e7ace57c7d4ac48eb6ed4dcd1f1a75d90de282384be8e0806409ddf08a79ef0a7944116e84b7426d260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfac700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000dc44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fe433e6a967a74d2f34314dfcc1c6b4cc351007dfec9dc892dd9040ec901bb620fa9799aff775bd9938c9384df110d4be252786b2dfdadcdb63626a2865091b9bbbab8b5ff6c24ebbd3a3c1510a41a3cc711bdf55b68443f8f4fbb1b853921bdd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000003a200000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033647400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000039244c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d977832cd7123db40f08363f7221ebfa6f103141721bfaf39606a3340dea519ac6998c36b76ea1aadaad92f866a9563902a40bc725678156380d140bbd7d294eb6ed4dcd1f1a75d90de282384be8e0806409ddf08a79ef0a7944116e84b7426d260fc989da42fcaaaeced192afeacdb186cbee78777cfd867afff5bf7f0966719a44ede47a4e84f10654083d183f9b758c6a46c14fabeb5009445b8afdc76c8273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006c00000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000005e00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d4d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000004e44c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e28034fee2653f608c76c6ce8dd89e4de7902d25e60a81b83f0198fa793d71459b909f840340ffb9c153c81e5ffc60af9d0b638bf25aee24eed2bb1f356eee7ce935db24b93a61d7c18faf88f873d70cdb27c5fc09ecbf39f8b09035aefb824dd286b7c1043394a181fab1749bdabfdc73b745ba5a5aa09a118f9f9f485d45b763d0a123795541b94d513d9013e4adc5921b65add7497b45f839ea6e2ffae44400000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "10419347", + "gasPrice": "1014514380", + "hash": "0x482002e76564007450fb62fa0bb8747304817fade7f758155ccc3aabbd93c61e", + "maxFeePerGas": "1026590846", + "maxPriorityFeePerGas": "1000000000", + "nonce": 157, + "signature": { + "networkV": null, + "r": "0x8af2eaca0102ea0f7ece8157190aeb9096f0544fb9ce33abaafbd6f0c4e7ef5e", + "s": "0x039bf8398e80280043263afa5c80ef71d2170c8bcc7c954574ef718c5b4a4fda", + "v": 27 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + }, + { + "receipt": { + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "contractAddress": null, + "cumulativeGasUsed": "13449016", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasPrice": "1016535536", + "gasUsed": "5665361", + "hash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "index": 30, + "logs": [ + { + "address": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "index": 50, + "topics": [ + "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d", + "0x000000000000000000000000c034550b542b83ba1de312b21d1c94a9a52b1595", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c", + "0xbd83227458e7b001798ea38dba5a3ff8517c4b6f214670649c3d33c7402cd2ad" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x00000000000000000000000012bb7bcc941b2e5ccef740d0e4317a5b35717d30", + "index": 51, + "topics": [ + "0x4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b511" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + }, + { + "address": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x", + "index": 52, + "topics": [ + "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8", + "0x000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x000000000000000000000000000000000000000000000000000000000000000f", + "index": 53, + "topics": [ + "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + }, + { + "address": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "blockNumber": 5424385, + "data": "0x", + "index": 54, + "topics": [ + "0x4383d976757d67ca920616be0b6430a681ea9d3dcce8d6d61d4603ca4a9bff63", + "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741" + ], + "transactionHash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "transactionIndex": 30 + } + ], + "logsBloom": "0x00000000080010000008000000080000000000000008000000000800004000040040008000000000000000000040000000000000000000000000000000000000000000000000200400000008020000010000000020000000000000000000000000000000000000000000000000000000000000100020000000000008000000000001000000000000000100000000000000000000000000000000804000000000004000800010000000000000000000020200000000000000000000000006000000000000000000200000000008000000000000000000000000000000000000000000000000000008000000000000000200000000000000000000000008000000", + "status": 1, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7" + }, + "response": { + "accessList": [], + "blockNumber": 5424385, + "blockHash": "0xd148c4b279f8a409bf6a34bf6a9a4580cf5c63856b13685df7f1e84b8b22ca75", + "chainId": "11155111", + "data": "0xbe6002c2000000000000000000000000ef1be3c049809cace5bc203bbe4ec1ab284bf75c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000066c4e65ec46d000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000065800000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000064a00000000000000000000000007cbb62eaa69f79e6873cd1ecb2392971036cfaa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057de6c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000063a44c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000632c6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000676ac704b3e7aaf0c351a1f601b64729dbf7e8fc0795f96911514695072b7b77729b3abeab66d247eea6d9f85e59b31c5a20edc32426b215e4dc7f152ddf495f3d62764ed7964a47341d5a4d5ec7d0c91f71f52e24969cf1e2d2dcf1c0689955b16ecc011e7450322fe9e0e5aa8f015e2823ca771f34919dca28c1c7671ccdb51e24f94d6ce10b4868db18453699852ca8af66a5ff7452f6e0af768318d631a72273778386b897a7bf43569d86e1ffd5154021750cfa3deb048d2bcd3ff429cd900000000000000000000000000000000000000000000000000000000", + "from": "0xC034550B542b83BA1De312b21d1C94a9a52B1595", + "gasLimit": "6759595", + "gasPrice": "1016535536", + "hash": "0x25e5dc9bd742eca511ffaf384448aafd9659d7ea4fc84649d2263bdd1f6016c6", + "maxFeePerGas": "1031669922", + "maxPriorityFeePerGas": "1000000000", + "nonce": 158, + "signature": { + "networkV": null, + "r": "0x8275fcd611ccc9acec86d0a73a0a316c3ebff40f91fbe57d976c4e8b03f8dd80", + "s": "0x675279e2254766987cde54b38ebbd5e9f94e10395e26ddffcb422c93a70aa463", + "v": 28 + }, + "to": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "type": 2, + "value": "0" + } + } + ], + "merkleRoot": "0x58025795c33f9e0121b492c9ea8dc31dc6803cc81b9066cd376333e802464741", + "solcInputHashes": [ + "b2112d617c776ac2cceb92d11c578094" + ], + "safeAddress": "0x1081B5AA9D9d4862A3dA4d469433FB36Ed80FA2A", + "moduleAddress": "0xEf1Be3C049809caCe5Bc203BBe4Ec1Ab284bF75c", + "executorAddress": "0xB5E96127D417b1B3ef8438496a38A143167209c7", + "nonce": "0", + "chainId": "11155111", + "actions": [ + { + "to": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141", + "value": "0", + "txData": "0x46b2d3f90000000000000000000000005b73c5498c1e3b4dba84de0f1833c4a029d90519", + "gas": "140334", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000007f060a060405234801561001057600080fd5b50306080526080516107b361003d6000396000818160ef01528181610358015261040101526107b36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806305d2912e1461005c5780630f5932f01461007157806380deb23014610099578063c161c93f146100d7578063f434c914146100ea575b600080fd5b61006f61006a366004610512565b610129565b005b61008461007f366004610567565b610204565b60405190151581526020015b60405180910390f35b6100c96100a7366004610605565b6000602081815293815260408082208552928152828120909352825290205481565b604051908152602001610090565b6100846100e5366004610641565b6102ad565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610090565b610139828260200135600161030e565b600061015061014b6040840184610683565b610492565b90508060008061016360208601866106d4565b6001600160a01b039081168252602080830193909352604091820160009081209188168082529184528281208785018035808452919095529290209390935591906101ae90856106d4565b6001600160a01b03167ff8cdf10a0ce6189c6d069e97320ef146e2bcbd32d6c0b86dcbfbf3bd8578fa706101e56040870187610683565b86336040516101f794939291906106f6565b60405180910390a4505050565b60008181805b8281101561029c5785858281811061022457610224610745565b90506020020135915060ff82111561024f576040516334f9a01d60e21b815260040160405180910390fd5b6001600160a01b03898116600090815260208181526040808320938c1683529281528282208a8352905290812054831c600116900361029457600093505050506102a4565b60010161020a565b506001925050505b95945050505050565b600060ff8211156102d1576040516334f9a01d60e21b815260040160405180910390fd5b506001600160a01b03808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b336001600160a01b03841681148015906103c5575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061075b565b155b801561046e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046c919061075b565b155b1561048c5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b60008181805b828110156104ed578585828181106104b2576104b2610745565b90506020020135915060ff8211156104dd576040516334f9a01d60e21b815260040160405180910390fd5b600180831b949094179301610498565b50505092915050565b80356001600160a01b038116811461050d57600080fd5b919050565b6000806040838503121561052557600080fd5b61052e836104f6565b9150602083013567ffffffffffffffff81111561054a57600080fd5b83016060818603121561055c57600080fd5b809150509250929050565b60008060008060006080868803121561057f57600080fd5b610588866104f6565b9450610596602087016104f6565b935060408601359250606086013567ffffffffffffffff808211156105ba57600080fd5b818801915088601f8301126105ce57600080fd5b8135818111156105dd57600080fd5b8960208260051b85010111156105f257600080fd5b9699959850939650602001949392505050565b60008060006060848603121561061a57600080fd5b610623846104f6565b9250610631602085016104f6565b9150604084013590509250925092565b6000806000806080858703121561065757600080fd5b610660856104f6565b935061066e602086016104f6565b93969395505050506040820135916060013590565b6000808335601e1984360301811261069a57600080fd5b83018035915067ffffffffffffffff8211156106b557600080fd5b6020019150600581901b36038213156106cd57600080fd5b9250929050565b6000602082840312156106e657600080fd5b6106ef826104f6565b9392505050565b6060808252810184905260006001600160fb1b0385111561071657600080fd5b8460051b808760808501376020830194909452506001600160a01b039190911660408201520160800192915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561076d57600080fd5b815180151581146106ef57600080fdfea264697066735822122020dc514244f7e02b9f3867b389de13e1f7f5cdf7fd0337585222f2706e6c8a0964736f6c6343000817003300000000000000000000000000000000", + "gas": "544567", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000029506101606040526000600d553480156200001757600080fd5b5060405162002930380380620029308339810160408190526200003a91620002b5565b80604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b815250604051806040016040528060018152602001603160f81b815250604051806040016040528060118152602001704a75696365626f782050726f6a6563747360781b81525060405180604001604052806008815260200167094aa92868a849eb60c31b8152508160009081620000db91906200038e565b506001620000ea82826200038e565b50620000fc91508390506006620001e7565b610120526200010d816007620001e7565b61014052815160208084019190912060e052815190820120610100524660a0526200019b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b038116620001d457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001df8162000220565b5050620004d0565b60006020835110156200020757620001ff8362000272565b90506200021a565b816200021484826200038e565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f81511115620002a0578260405163305a27a960e01b8152600401620001cb91906200045a565b8051620002ad82620004ab565b179392505050565b600060208284031215620002c857600080fd5b81516001600160a01b0381168114620002e057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031257607f821691505b6020821081036200033357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000389576000816000526020600020601f850160051c81016020861015620003645750805b601f850160051c820191505b81811015620003855782815560010162000370565b5050505b505050565b81516001600160401b03811115620003aa57620003aa620002e7565b620003c281620003bb8454620002fd565b8462000339565b602080601f831160018114620003fa5760008415620003e15750858301515b600019600386901b1c1916600185901b17855562000385565b600085815260208120601f198616915b828110156200042b578886015182559484019460019091019084016200040a565b50858210156200044a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048a578581018301518582016040015282016200046c565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003335760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516124056200052b6000396000610e0801526000610ddb015260006117c9015260006117a1015260006116fc015260006117260152600061175001526124056000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd14610422578063e131fc0c14610435578063e985e9c514610448578063f2fde38b1461045b57600080fd5b8063a22cb465146103d6578063b88d4fde146103e9578063c0715888146103fc578063c3cda5201461040f57600080fd5b80638e539e8c116100de5780638e539e8c1461038957806391ddadf41461039c57806395d89b41146103bb5780639ab24eb0146103c357600080fd5b80637ecebe001461033457806384b0196e1461035d5780638da5cb5b1461037857600080fd5b80633a46b1a81161017c5780635c19a95c1161014b5780635c19a95c146102f35780636352211e1461030657806370a0823114610319578063715018a61461032c57600080fd5b80633a46b1a81461029957806342842e0e146102ac5780634bf5d7e9146102bf578063587cde1e146102c757600080fd5b8063081812fc116101b8578063081812fc14610233578063095ea7b31461025e57806323b872dd146102735780632407497e1461028657600080fd5b806301ffc9a7146101df57806306661abd1461020757806306fdde031461021e575b600080fd5b6101f26101ed366004611e1d565b61046e565b60405190151581526020015b60405180910390f35b610210600d5481565b6040519081526020016101fe565b610226610499565b6040516101fe9190611e8a565b610246610241366004611e9d565b61052b565b6040516001600160a01b0390911681526020016101fe565b61027161026c366004611ecb565b610554565b005b610271610281366004611ef7565b610563565b610271610294366004611f38565b6105f3565b6102106102a7366004611ecb565b610650565b6102716102ba366004611ef7565b6106d1565b6102266106f1565b6102466102d5366004611f38565b6001600160a01b039081166000908152600960205260409020541690565b610271610301366004611f38565b610769565b610246610314366004611e9d565b610774565b610210610327366004611f38565b61077f565b6102716107c7565b610210610342366004611f38565b6001600160a01b031660009081526008602052604090205490565b6103656107db565b6040516101fe9796959493929190611f55565b600c546001600160a01b0316610246565b610210610397366004611e9d565b610821565b6103a461088b565b60405165ffffffffffff90911681526020016101fe565b61022661089a565b6102106103d1366004611f38565b6108a9565b6102716103e4366004611fee565b6108d9565b6102716103f736600461209b565b6108e4565b61021061040a366004611f38565b6108fb565b61027161041d36600461214a565b61096a565b610226610430366004611e9d565b610a27565b600e54610246906001600160a01b031681565b6101f26104563660046121ac565b610ac5565b610271610469366004611f38565b610af3565b60006001600160e01b03198216630321f74760e01b1480610493575061049382610b31565b92915050565b6060600080546104a8906121da565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906121da565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610b81565b506000828152600460205260409020546001600160a01b0316610493565b61055f828233610bba565b5050565b6001600160a01b03821661059257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061059f838333610bc7565b9050836001600160a01b0316816001600160a01b0316146105ed576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610589565b50505050565b6105fb610beb565b600e80546001600160a01b0383166001600160a01b031990911681179091556040805133815290517fe7784d93cfbfa4408e19577e6cc0436f4dbb51214b70e100905dfce9def88c169181900360200190a250565b60008061065b61088b565b90508065ffffffffffff16831061069657604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b6106c06106a284610c18565b6001600160a01b0386166000908152600a6020526040902090610c4f565b6001600160d01b0316949350505050565b6106ec838383604051806020016040528060008152506108e4565b505050565b60606106fb610d05565b65ffffffffffff1661070b61088b565b65ffffffffffff1614610731576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b3361055f8183610d10565b600061049382610b81565b60006001600160a01b0382166107ab576040516322718ad960e21b815260006004820152602401610589565b506001600160a01b031660009081526003602052604090205490565b6107cf610beb565b6107d96000610d82565b565b6000606080600080600060606107ef610dd4565b6107f7610e01565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60008061082c61088b565b90508065ffffffffffff16831061086757604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610589565b61087b61087384610c18565b600b90610c4f565b6001600160d01b03169392505050565b6000610895610d05565b905090565b6060600180546104a8906121da565b6001600160a01b0381166000908152600a602052604081206108ca90610e2e565b6001600160d01b031692915050565b61055f338383610e67565b6108ef848484610563565b6105ed84848484610f06565b6000600d6000815461090c9061222a565b9182905550905061091d828261102f565b6001600160a01b038216817f365b3162cd780731fc55a794b59494d472bc2af701007f581843a70673814698336040516001600160a01b03909116815260200160405180910390a3919050565b8342111561098e57604051632341d78760e11b815260048101859052602401610589565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a0890610a009060a00160405160208183030381529060405280519060200120611049565b858585611076565b9050610a1481876110a4565b610a1e8188610d10565b50505050505050565b600e546060906001600160a01b031680610a51575050604080516020810190915260008152919050565b604051636d02a25560e11b8152600481018490526001600160a01b0382169063da0544aa90602401600060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abe9190810190612243565b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610afb610beb565b6001600160a01b038116610b2557604051631e4fbdf760e01b815260006004820152602401610589565b610b2e81610d82565b50565b60006001600160e01b031982166380ac58cd60e01b1480610b6257506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b0319831614610493565b6000818152600260205260408120546001600160a01b03168061049357604051637e27328960e01b815260048101849052602401610589565b6106ec83838360016110f7565b600080610bd58585856111fd565b9050610be3818660016112f6565b949350505050565b600c546001600160a01b031633146107d95760405163118cdaa760e01b8152336004820152602401610589565b600065ffffffffffff821115610c4b576040516306dfcc6560e41b81526030600482015260248101839052604401610589565b5090565b815460009081816005811115610cae576000610c6a84611371565b610c7490856122ba565b60008881526020902090915081015465ffffffffffff9081169087161015610c9e57809150610cac565b610ca98160016122cd565b92505b505b6000610cbc87878585611459565b90508015610cf757610ce187610cd36001846122ba565b600091825260209091200190565b54600160301b90046001600160d01b0316610cfa565b60005b979650505050505050565b600061089543610c18565b6001600160a01b0382811660008181526009602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46106ec8183610d7d866114bb565b6114c6565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600661162d565b60606108957f0000000000000000000000000000000000000000000000000000000000000000600761162d565b80546000908015610e5e57610e4883610cd36001846122ba565b54600160301b90046001600160d01b0316610abe565b60009392505050565b6001600160a01b038216610e9957604051630b61174360e31b81526001600160a01b0383166004820152602401610589565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105ed57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610f489033908890879087906004016122e0565b6020604051808303816000875af1925050508015610f83575060408051601f3d908101601f19168201909252610f809181019061231d565b60015b610fec573d808015610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b508051600003610fe457604051633250574960e11b81526001600160a01b0385166004820152602401610589565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461102857604051633250574960e11b81526001600160a01b0385166004820152602401610589565b5050505050565b61055f8282604051806020016040528060008152506116d8565b60006104936110566116ef565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806110888888888861181a565b92509250925061109882826118e9565b50909695505050505050565b6001600160a01b03821660009081526008602052604090208054600181019091558181146106ec576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610589565b808061110b57506001600160a01b03821615155b156111cd57600061111b84610b81565b90506001600160a01b038316158015906111475750826001600160a01b0316816001600160a01b031614155b801561115a57506111588184610ac5565b155b156111835760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610589565b81156111cb5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b039081169083161561122a5761122a8184866119a2565b6001600160a01b03811615611268576112476000856000806110f7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611297576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b03831661131d5761131a600b611a0661131584611a12565b611a46565b50505b6001600160a01b03821661133f5761133c600b611a7f61131584611a12565b50505b6001600160a01b038381166000908152600960205260408082205485841683529120546106ec929182169116836114c6565b60008160000361138357506000919050565b6000600161139084611a8b565b901c6001901b905060018184816113a9576113a961233a565b048201901c905060018184816113c1576113c161233a565b048201901c905060018184816113d9576113d961233a565b048201901c905060018184816113f1576113f161233a565b048201901c905060018184816114095761140961233a565b048201901c905060018184816114215761142161233a565b048201901c905060018184816114395761143961233a565b048201901c9050610abe818285816114535761145361233a565b04611b1f565b60005b818310156114b35760006114708484611b35565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561149f578092506114ad565b6114aa8160016122cd565b93505b5061145c565b509392505050565b60006104938261077f565b816001600160a01b0316836001600160a01b0316141580156114e85750600081115b156106ec576001600160a01b0383161561158b576001600160a01b0383166000908152600a60205260408120819061152690611a7f61131586611a12565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611580929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156106ec576001600160a01b0382166000908152600a6020526040812081906115c490611a0661131586611a12565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161161e929190918252602082015260400190565b60405180910390a25050505050565b606060ff83146116475761164083611b50565b9050610493565b818054611653906121da565b80601f016020809104026020016040519081016040528092919081815260200182805461167f906121da565b80156116cc5780601f106116a1576101008083540402835291602001916116cc565b820191906000526020600020905b8154815290600101906020018083116116af57829003601f168201915b50505050509050610493565b6116e28383611b8f565b6106ec6000848484610f06565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561174857507f000000000000000000000000000000000000000000000000000000000000000046145b1561177257507f000000000000000000000000000000000000000000000000000000000000000090565b610895604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561185557506000915060039050826118df565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156118a9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d5575060009250600191508290506118df565b9250600091508190505b9450945094915050565b60008260038111156118fd576118fd612350565b03611906575050565b600182600381111561191a5761191a612350565b036119385760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561194c5761194c612350565b0361196d5760405163fce698f760e01b815260048101829052602401610589565b600382600381111561198157611981612350565b0361055f576040516335e2f38360e21b815260048101829052602401610589565b6119ad838383611bf4565b6106ec576001600160a01b0383166119db57604051637e27328960e01b815260048101829052602401610589565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610589565b6000610abe8284612366565b60006001600160d01b03821115610c4b576040516306dfcc6560e41b815260d0600482015260248101839052604401610589565b600080611a72611a5461088b565b611a6a611a6088610e2e565b868863ffffffff16565b879190611c57565b915091505b935093915050565b6000610abe828461238d565b600080608083901c15611aa057608092831c92015b604083901c15611ab257604092831c92015b602083901c15611ac457602092831c92015b601083901c15611ad657601092831c92015b600883901c15611ae857600892831c92015b600483901c15611afa57600492831c92015b600283901c15611b0c57600292831c92015b600183901c156104935760010192915050565b6000818310611b2e5781610abe565b5090919050565b6000611b4460028484186123ad565b610abe908484166122cd565b60606000611b5d83611c65565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038216611bb957604051633250574960e11b815260006004820152602401610589565b6000611bc783836000610bc7565b90506001600160a01b038116156106ec576040516339e3563760e11b815260006004820152602401610589565b60006001600160a01b03831615801590610be35750826001600160a01b0316846001600160a01b03161480611c2e5750611c2e8484610ac5565b80610be35750506000908152600460205260409020546001600160a01b03908116911614919050565b600080611a72858585611c8d565b600060ff8216601f81111561049357604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611dac576000611cab87610cd36001856122ba565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611cff57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611d4b5784611d2288610cd36001866122ba565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611d9c565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150611a779050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611a77565b6001600160e01b031981168114610b2e57600080fd5b600060208284031215611e2f57600080fd5b8135610abe81611e07565b60005b83811015611e55578181015183820152602001611e3d565b50506000910152565b60008151808452611e76816020860160208601611e3a565b601f01601f19169290920160200192915050565b602081526000610abe6020830184611e5e565b600060208284031215611eaf57600080fd5b5035919050565b6001600160a01b0381168114610b2e57600080fd5b60008060408385031215611ede57600080fd5b8235611ee981611eb6565b946020939093013593505050565b600080600060608486031215611f0c57600080fd5b8335611f1781611eb6565b92506020840135611f2781611eb6565b929592945050506040919091013590565b600060208284031215611f4a57600080fd5b8135610abe81611eb6565b60ff60f81b881681526000602060e06020840152611f7660e084018a611e5e565b8381036040850152611f88818a611e5e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611fdc57835183529284019291840191600101611fc0565b50909c9b505050505050505050505050565b6000806040838503121561200157600080fd5b823561200c81611eb6565b91506020830135801515811461202157600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561206b5761206b61202c565b604052919050565b600067ffffffffffffffff82111561208d5761208d61202c565b50601f01601f191660200190565b600080600080608085870312156120b157600080fd5b84356120bc81611eb6565b935060208501356120cc81611eb6565b925060408501359150606085013567ffffffffffffffff8111156120ef57600080fd5b8501601f8101871361210057600080fd5b803561211361210e82612073565b612042565b81815288602083850101111561212857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c0878903121561216357600080fd5b863561216e81611eb6565b95506020870135945060408701359350606087013560ff8116811461219257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156121bf57600080fd5b82356121ca81611eb6565b9150602083013561202181611eb6565b600181811c908216806121ee57607f821691505b60208210810361220e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161223c5761223c612214565b5060010190565b60006020828403121561225557600080fd5b815167ffffffffffffffff81111561226c57600080fd5b8201601f8101841361227d57600080fd5b805161228b61210e82612073565b8181528560208385010111156122a057600080fd5b6122b1826020830160208601611e3a565b95945050505050565b8181038181111561049357610493612214565b8082018082111561049357610493612214565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231390830184611e5e565b9695505050505050565b60006020828403121561232f57600080fd5b8151610abe81611e07565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160d01b0381811683821601908082111561238657612386612214565b5092915050565b6001600160d01b0382811682821603908082111561238657612386612214565b6000826123ca57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220212b53690543126073ac3819b10564780362be86ee0a9d0b651836ee9d71d71e64736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000", + "gas": "2244572", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000016b460c06040523480156200001157600080fd5b5060405162001654380380620016548339810160408190526200003491620000f4565b6001600160a01b03808416608052819081166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000076816200008b565b50506001600160a01b031660a0525062000148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f157600080fd5b50565b6000806000606084860312156200010a57600080fd5b83516200011781620000db565b60208501519093506200012a81620000db565b60408501519092506200013d81620000db565b809150509250925092565b60805160a0516114bd620001976000396000818160f401528181610290015281816104be0152818161057201526107cd01526000818161025401528181610d470152610df001526114bd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063862026501161008c578063c5664e2111610066578063c5664e21146101f9578063d17541531461021c578063f2fde38b1461023c578063f434c9141461024f57600080fd5b806386202650146101c25780638da5cb5b146101d5578063a1ed3175146101e657600080fd5b80636e49181f116100c85780636e49181f14610171578063714e7f3214610194578063715018a6146101a7578063821b9fd8146101af57600080fd5b8063293c4999146100ef5780635dd8f6aa1461013357806363d0850a1461015c575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61011661014136600461113f565b6001602052600090815260409020546001600160a01b031681565b61016f61016a36600461116d565b610276565b005b61018461017f3660046111af565b610425565b604051901515815260200161012a565b61016f6101a23660046111af565b6104a4565b61016f61079f565b61016f6101bd3660046111df565b6107b3565b6101166101d03660046111af565b610ab8565b6000546001600160a01b0316610116565b61016f6101f436600461126c565b610be4565b61018461020736600461129a565b60026020526000908152604090205460ff1681565b61022f61022a36600461113f565b610c4e565b60405161012a91906112be565b61016f61024a36600461129a565b610cba565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516331a9108f60e11b81526004810184905261030b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610303919061130b565b846010610cfd565b604051633a01714f60e01b8152600481018490526001600160a01b03838116602483015260009190831690633a01714f90604401606060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103809190611328565b516001600160a01b0316036103a857604051630faa917b60e11b815260040160405180910390fd5b6103b28382610e81565b60008381526004602090815260408083206001600160a01b038681168086529184529382902080546001600160a01b03191694861694851790559051338152909186917fc670a502bbb9f8a4315f95eca901a9f99b65f89a2eb5705a58050e5c00f9d672910160405180910390a4505050565b600082815260036020526040812054815b8181101561049757600085815260036020526040902080546001600160a01b03861691908390811061046a5761046a6113b7565b6000918252602090912001546001600160a01b03160361048f5760019250505061049e565b600101610436565b5060009150505b92915050565b6040516331a9108f60e11b81526004810183905261056f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610531919061130b565b336000908152600260205260409020548490600e9060ff16801561056a57506000868152600160205260409020546001600160a01b0316155b61103a565b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906113cd565b101561061157604051634a283a5360e11b815260040160405180910390fd5b6000828152600160205260408120546001600160a01b0316908115806106a357506040516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a191906113e6565b155b61071557604051632674968d60e21b8152600481018590526001600160a01b038316906399d25a3490602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071091906113e6565b610718565b60015b9050806107385760405163a33db4cb60e01b815260040160405180910390fd5b60008481526001602090815260409182902080546001600160a01b0319166001600160a01b038716908117909155915133815286917f7f9a7dcb234c909a09de2f344661ad9e5b24067adb97c908647c2edcbb121c3091015b60405180910390a350505050565b6107a761104a565b6107b16000611077565b565b6040516331a9108f60e11b815260048101849052610864907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061130b565b6000858152600160205260409020548590600f906001600160a01b0316331461103a565b6000838152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e691906113e6565b1580610956575060405163b1a50e3360e01b8152600481018690526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095691906113e6565b6000868152600160205260409020549091506001600160a01b0316331480159061097e575080155b1561099c576040516375fef35f60e11b815260040160405180910390fd5b60008581526003602052604090206109b59085856110c7565b50826001811115610a745760005b81811015610a725760006109d8826001611403565b90505b82811015610a69578686828181106109f5576109f56113b7565b9050602002016020810190610a0a919061129a565b6001600160a01b0316878784818110610a2557610a256113b7565b9050602002016020810190610a3a919061129a565b6001600160a01b031603610a6157604051633e3830ab60e11b815260040160405180910390fd5b6001016109db565b506001016109c3565b505b857fb648241d83df6540fc10f2acc641e4bf80a1e84e7ae2f1f6b0ad204b8fee635b868633604051610aa893929190611424565b60405180910390a2505050505050565b60008281526004602090815260408083206001600160a01b0380861685529252822054168015801590610af05750610af08482610425565b15610afc57905061049e565b600084815260036020526040812054905b81811015610bd8576000868152600360205260408120805483908110610b3557610b356113b7565b6000918252602082200154604051633a01714f60e01b8152600481018a90526001600160a01b03898116602483015290911692508290633a01714f90604401606060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190611328565b516001600160a01b031614610bcf57935061049e92505050565b50600101610b0d565b50600095945050505050565b610bec61104a565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591513381529192917f11207664cc48b0fa81c8674795f1d8f642960f38d5d2d305ad813093bed85fab910160405180910390a35050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c90575b50505050509050919050565b610cc261104a565b6001600160a01b038116610cf157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610cfa81611077565b50565b336001600160a01b0384168114801590610db4575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db291906113e6565b155b8015610e5d575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5b91906113e6565b155b15610e7b5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b610e8b8282610425565b15610e94575050565b6000828152600160205260408082205490516301ffc9a760e01b8152632877540760e01b60048201526001600160a01b03909116919082906301ffc9a790602401602060405180830381865afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906113e6565b1580610f86575060405163b1a50e3360e01b8152600481018590526001600160a01b0383169063b1a50e3390602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8691906113e6565b6000858152600160205260409020549091506001600160a01b03163314801590610fae575080155b15610fcc576040516375fef35f60e11b815260040160405180910390fd5b600084815260036020908152604080832080546001810182559084529282902090920180546001600160a01b0319166001600160a01b038716908117909155915133815286917f409bccc07b7cf7807930526a24318212d614c59f2dde05a017a41efee144e7c89101610791565b80610e7b57610e7b848484610cfd565b6000546001600160a01b031633146107b15760405163118cdaa760e01b8152336004820152602401610ce8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561111a579160200282015b8281111561111a5781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906110e7565b5061112692915061112a565b5090565b5b80821115611126576000815560010161112b565b60006020828403121561115157600080fd5b5035919050565b6001600160a01b0381168114610cfa57600080fd5b60008060006060848603121561118257600080fd5b83359250602084013561119481611158565b915060408401356111a481611158565b809150509250925092565b600080604083850312156111c257600080fd5b8235915060208301356111d481611158565b809150509250929050565b6000806000604084860312156111f457600080fd5b83359250602084013567ffffffffffffffff8082111561121357600080fd5b818601915086601f83011261122757600080fd5b81358181111561123657600080fd5b8760208260051b850101111561124b57600080fd5b6020830194508093505050509250925092565b8015158114610cfa57600080fd5b6000806040838503121561127f57600080fd5b823561128a81611158565b915060208301356111d48161125e565b6000602082840312156112ac57600080fd5b81356112b781611158565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156112ff5783516001600160a01b0316835292840192918401916001016112da565b50909695505050505050565b60006020828403121561131d57600080fd5b81516112b781611158565b60006060828403121561133a57600080fd5b6040516060810181811067ffffffffffffffff8211171561136b57634e487b7160e01b600052604160045260246000fd5b604052825161137981611158565b8152602083015160ff8116811461138f57600080fd5b6020820152604083015163ffffffff811681146113ab57600080fd5b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113df57600080fd5b5051919050565b6000602082840312156113f857600080fd5b81516112b78161125e565b8082018082111561049e57634e487b7160e01b600052601160045260246000fd5b6040808252810183905260008460608301825b8681101561146757823561144a81611158565b6001600160a01b0316825260209283019290910190600101611437565b506001600160a01b0394909416602093909301929092525090939250505056fea2646970667358221220455485ce740f4c22d038bc8eb16abf44a5aa16a859605afc7a452fc8fb1082bb64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d70000000000000000000000001081b5aa9d9d4862a3da4d469433fb36ed80fa2a000000000000000000000000", + "gas": "1351808", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000e4760a060405234801561001057600080fd5b50604051610e27380380610e2783398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610d9661009160003960008181609101526101300152610d966000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635963b80b1461005157806369e11cc51461006c57806388bc2ef31461008c578063dd5f214a146100cb575b600080fd5b610059600081565b6040519081526020015b60405180910390f35b61007f61007a3660046109af565b6100e0565b6040516100639190610a23565b6100b37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610063565b6100de6100d9366004610a71565b61010e565b005b60606100ed848484610225565b905080516000036101075761010484600084610225565b90505b9392505050565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019b9190610b0c565b6001600160a01b0316146101c257604051632adfdd0560e21b815260040160405180910390fd5b8160005b8181101561021c5760008585838181106101e2576101e2610b29565b90506020028101906101f49190610b3f565b6101fd90610bf2565b905061021388888360000151846020015161039f565b506001016101c6565b50505050505050565b60008381526020818152604080832085845282528083208484529091528120546060918167ffffffffffffffff81111561026157610261610b5f565b60405190808252806020026020018201604052801561029a57816020015b610287610965565b81526020019060019003908161027f5790505b50905060005b82811015610395576000878152600160209081526040808320898452825280832088845282528083208484529091529020546102da610965565b60018281168114825282901c63ffffffff16602080830191909152602183901c66ffffffffffffff16604080840191909152605984901c6001600160a01b0316606084015260008b8152600283528181208b825283528181208a82528352818120868252909252902054801561036c5765ffffffffffff811660808301526001600160a01b03603082901c1660a08301525b8185858151811061037f5761037f610b29565b60209081029190910101525050506001016102a0565b5095945050505050565b60006103ac858585610225565b805190915060005b8181101561042e578281815181106103ce576103ce610b29565b602002602001015160800151421080156104085750610406848483815181106103f9576103f9610b29565b6020026020010151610808565b155b1561042657604051631974459560e01b815260040160405180910390fd5b6001016103b4565b508251600090815b818110156107da5785818151811061045057610450610b29565b60200260200101516020015160000361047c5760405163e119ba4560e01b815260040160405180910390fd5b66ffffffffffffff801686828151811061049857610498610b29565b60200260200101516040015111156104c357604051631da26cc960e11b815260040160405180910390fd5b8581815181106104d5576104d5610b29565b602002602001015160200151836104ec9190610d19565b9250633b9aca0083111561051357604051630eca736160e41b815260040160405180910390fd5b600086828151811061052757610527610b29565b6020026020010151600001511561053c575060015b600187838151811061055057610550610b29565b602002602001015160200151901b81179050602187838151811061057657610576610b29565b602002602001015160400151901b81179050605987838151811061059c5761059c610b29565b6020908102919091018101516060015160008d81526001835260408082208e835284528082208d835284528082208783529093529182206001600160a01b0390911690921b9290921790819055875190919088908490811061060057610600610b29565b6020026020010151608001511180610648575060006001600160a01b031687838151811061063057610630610b29565b602002602001015160a001516001600160a01b031614155b156107225765ffffffffffff801687838151811061066857610668610b29565b60200260200101516080015111156106935760405163d509b54d60e01b815260040160405180910390fd5b60008783815181106106a7576106a7610b29565b60200260200101516080015165ffffffffffff16905060308884815181106106d1576106d1610b29565b60209081029190910181015160a0015160008e81526002835260408082208f835284528082208e83528452808220888352909352919091206001600160a01b0390911690911b91909117905561077c565b60008a81526002602090815260408083208c845282528083208b845282528083208584529091529020541561077c5760008a81526002602090815260408083208c845282528083208b845282528083208584529091528120555b87898b7f0d7ea8ac1cb69dfa18ce2b18e90d31b4d4a0370aacadf7db42d42930a09b3f018a86815181106107b2576107b2610b29565b6020026020010151336040516107c9929190610d3a565b60405180910390a450600101610436565b50600097885260208881526040808a20988a5297815287892096895295909552505050919092209190915550565b8151600090815b8181101561095857836020015185828151811061082e5761082e610b29565b602002602001015160200151148015610879575083606001516001600160a01b031685828151811061086257610862610b29565b6020026020010151606001516001600160a01b0316145b80156108b757508360a001516001600160a01b03168582815181106108a0576108a0610b29565b602002602001015160a001516001600160a01b0316145b80156108e3575083604001518582815181106108d5576108d5610b29565b602002602001015160400151145b801561091357508360000151151585828151811061090357610903610b29565b6020026020010151600001511515145b80156109405750836080015185828151811061093157610931610b29565b60200260200101516080015110155b156109505760019250505061095f565b60010161080f565b5060009150505b92915050565b6040518060c00160405280600015158152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b6000806000606084860312156109c457600080fd5b505081359360208301359350604090920135919050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b6020808252825182820181905260009190848201906040850190845b81811015610a6557610a528385516109db565b9284019260c09290920191600101610a3f565b50909695505050505050565b60008060008060608587031215610a8757600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610aad57600080fd5b818701915087601f830112610ac157600080fd5b813581811115610ad057600080fd5b8860208260051b8501011115610ae557600080fd5b95989497505060200194505050565b6001600160a01b0381168114610b0957600080fd5b50565b600060208284031215610b1e57600080fd5b815161010781610af4565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610b5557600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610b9857610b98610b5f565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b9857610b98610b5f565b604051601f8201601f1916810167ffffffffffffffff81118282101715610bea57610bea610b5f565b604052919050565b60006040808336031215610c0557600080fd5b610c0d610b75565b8335815260208085013567ffffffffffffffff80821115610c2d57600080fd5b9086019036601f830112610c4057600080fd5b813581811115610c5257610c52610b5f565b610c60848260051b01610bc1565b818152848101925060c0918202840185019136831115610c7f57600080fd5b938501935b82851015610d0657808536031215610c9c5760008081fd5b610ca4610b9e565b85358015158114610cb55760008081fd5b815285870135878201528886013589820152606080870135610cd681610af4565b908201526080868101359082015260a080870135610cf381610af4565b9082015284529384019392850192610c84565b5093850193909352509195945050505050565b8082018082111561095f57634e487b7160e01b600052601160045260246000fd5b60e08101610d4882856109db565b6001600160a01b039290921660c0919091015291905056fea264697066735822122069e44bbc84e1bdd09cacc40026c83d75a54495dabbbeb8d4ce84237fd3832bdd64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000000000000000000000000000000000000000000000", + "gas": "904237", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000197c60a060405234801561001057600080fd5b5060405161195c38038061195c83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118ca61009260003960008181610125015261039501526118ca6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638b04533a116100665780638b04533a1461015f578063b51d624414610174578063c02c63ad14610194578063c1ec61ee146101a7578063d7e1ec88146101c857600080fd5b806325a61d5c146100a357806333f5bd0a146100cc57806343a266c2146100fa57806370174dcc1461010d57806388bc2ef314610120575b600080fd5b6100b66100b1366004611547565b6101e8565b6040516100c391906115c8565b60405180910390f35b6100ec6100da3660046115d7565b60006020819052908152604090205481565b6040519081526020016100c3565b6100b66101083660046115d7565b610203565b6100b661011b366004611608565b61036b565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c3565b61017261016d3660046115d7565b6106ec565b005b610187610182366004611667565b6107d3565b6040516100c39190611693565b6100b66101a23660046115d7565b610903565b6101ba6101b53660046115d7565b610aa4565b6040516100c392919061171a565b6101db6101d63660046115d7565b610ae7565b6040516100c39190611737565b6101f06114f2565b6101fa8383610b1b565b90505b92915050565b61020b6114f2565b600082815260208190526040812054900361022b576101fd600080610b1b565b600061023683610be0565b905080156102ae576102488382610b1b565b915060006102568484610c6c565b9050600481600581111561026c5761026c6116e2565b148061028957506000816005811115610287576102876116e2565b145b15610295575050919050565b826040015191506102a68483610b1b565b925050610346565b506000828152602081905260409020546102c88382610b1b565b915060006102d68484610c6c565b90505b60048160058111156102ed576102ed6116e2565b1415801561030d5750600081600581111561030a5761030a6116e2565b14155b8061031b5750826060015142105b1561034457826040015191506103318483610b1b565b925061033d8484610c6c565b90506102d9565b505b81608001516000036103585750919050565b61036483836001610c86565b9392505050565b6103736114f2565b604051632eec7b5560e11b815260048101899052889033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190611745565b6001600160a01b03161461042757604051632adfdd0560e21b815260040160405180910390fd5b63ffffffff88111561044c57604051631525af6b60e31b815260040160405180910390fd5b633b9aca0086111561047157604051637027d73760e01b815260040160405180910390fd5b6affffffffffffffffffffff87111561049d5760405163698f22ad60e01b815260040160405180910390fd5b826000036104a9574292505b66ffffffffffffff6104bb8985611778565b11156104da5760405163acc92f5b60e01b815260040160405180910390fd5b6001600160a01b038516156105b857846001600160a01b03163b6000036105145760405163a903807d60e01b815260040160405180910390fd5b6040516301ffc9a760e01b8152634b80c8df60e01b60048201526001600160a01b038616906301ffc9a790602401602060405180830381865afa92505050801561057b575060408051601f3d908101601f191682019092526105789181019061178b565b60015b6105985760405163a903807d60e01b815260040160405180910390fd5b806105b65760405163a903807d60e01b815260040160405180910390fd5b505b60008981526020819052604081205490428210156105d657426105e1565b6105e1826001611778565b90506105ef8b828b88610d56565b6001600160a01b038716151580610606575060008a115b806106115750600088115b156106485760008b8152600160209081526040808320848452909152902060c089901b60a08c901b6001600160a01b038a16171790555b851561066b5760008b815260036020908152604080832084845290915290208690555b604080518b8152602081018b90529081018990526001600160a01b03881660608201526080810187905260a081018690523360c08201528b9082907f11a490bebff1beffe4bdd210894aca6ea5049427ce4b3c48865717677199cb079060e00160405180910390a36106dd8b82610b1b565b9b9a5050505050505050505050565b600081815260208190526040812054610706908390610b1b565b905080608001516000148061071d575060c0810151155b15610726575050565b600082815260046020908152604080832084830151845290915281206080830151600182015491929161075c9061c35090611778565b61076691906117ad565b83606001516107759190611778565b905060008142106107865781610788565b425b9050600084606001518261079c91906117c4565b90506000856080015182816107b3576107b36117d7565b0490506107c1878785610fa9565b85556001909401939093555050505050565b6060826000036107ef5760008481526020819052604090205492505b6000806107fc8686610b1b565b90505b60208101511580159061081157508382105b156108385781610820816117ed565b925050610831868260400151610b1b565b90506107ff565b8167ffffffffffffffff81111561085157610851611806565b60405190808252806020026020018201604052801561088a57816020015b6108776114f2565b81526020019060019003908161086f5790505b5092508160000361089c575050610364565b6108a68686610b1b565b905060005b828110156108f9578184826108bf816117ed565b9350815181106108d1576108d161181c565b60200260200101819052508281146108f4576108f1878360400151610b1b565b91505b6108ab565b5050509392505050565b61090b6114f2565b600082815260208190526040812054900361092b576101fd600080610b1b565b6000610936836110ae565b9050600081156109c65761094a8483610b1b565b92506109568484610c6c565b9050600481600581111561096c5761096c6116e2565b148061098957506003816005811115610987576109876116e2565b145b806109a5575060008160058111156109a3576109a36116e2565b145b156109b1575050919050565b6109bf848460400151610b1b565b9250610a04565b6000848152602081905260409020546109e0908590610b1b565b92505b4283606001511115610a04576109fd848460400151610b1b565b92506109e3565b8260800151600003610a2357610a1b600080610b1b565b949350505050565b610a2d8484610c6c565b90506004816005811115610a4357610a436116e2565b1480610a6057506000816005811115610a5e57610a5e6116e2565b145b15610a7157610a1b84846000610c86565b610a7f848460400151610b1b565b92508260800151600003610a9857610a1b600080610b1b565b610a1b84846000610c86565b610aac6114f2565b600082815260208190526040812054610ac58482610b1b565b9250610adf84846020015185606001518660400151611170565b915050915091565b60008181526020819052604081205481610b018483610b1b565b9050610a1b84826020015183606001518460400151611170565b610b236114f2565b81156101fd57602081810183905260008481526002825260408082208583528352808220546affffffffffffffffffffff811660a080870191909152605882901c66ffffffffffffff90811684880152609083901c16606087015260c89190911c8552868352600184528183208684528452818320546001600160a01b03811660e08701529081901c63ffffffff908116608087015260c091821c1690850152948152600382528481209381529290529190205461010082015290565b60008181526020819052604081205481610bfa8483610b1b565b90505b608081015115801590610c23575080608001518160600151610c1f9190611778565b4210155b15610c32575060009392505050565b80606001514210610c4857602001519392505050565b610c56848260400151610b1b565b8051909150600003610bfd575060009392505050565b60006101fa83836020015184606001518560400151611170565b610c8e6114f2565b60008215610cb5576080840151610ca590426117c4565b610cb0906001611778565b610cc0565b610cc0426001611778565b90506000610cce8583611234565b90506000610cdc86836112c0565b9050604051806101200160405280828152602001876020015181526020018760400151815260200183815260200187608001518152602001610d1f898986610fa9565b81526020018760c0015181526020018760e001516001600160a01b0316815260200187610100015181525093505050509392505050565b60008481526020819052604081205490819003610d8a57610d8485610d7c600080610b1b565b868587611312565b50610fa3565b6000610d968683610b1b565b90506000610da48783610c6c565b905081606001514210158015610dcc57506004816005811115610dc957610dc96116e2565b14155b8015610dea57506000816005811115610de757610de76116e2565b14155b80610e335750816060015142108015610e15575081608001518260600151610e129190611778565b84105b8015610e3357506004816005811115610e3057610e306116e2565b14155b80610eb95750816060015142108015610e5f575081608001518260600151610e5b9190611778565b8410155b8015610e7d57506004816005811115610e7a57610e7a6116e2565b14155b8015610e9b57506003816005811115610e9857610e986116e2565b14155b8015610eb957506000816005811115610eb657610eb66116e2565b14155b15610ecf57610ecc878360400151610b1b565b91505b85826020015103610ef35760405163dad3de1760e01b815260040160405180910390fd5b60e08201516000906001600160a01b031615610f7e578260e001516001600160a01b0316631be052896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190611832565b610f799088611778565b610f81565b60005b9050610f9e888489888511610f965788610f98565b845b8a611312565b505050505b50505050565b60008260800151600003610fe457610fdd8360a001518460c00151633b9aca00610fd391906117c4565b633b9aca0061141a565b9050610364565b5060a082015160c08301511561036457600083606001518361100691906117c4565b905060008460800151828161101d5761101d6117d7565b0490506103e881111561107b5760008681526004602090815260408083208883015184528252918290208251808401909352805483526001015490820181905215611079578051602082015190945061107690836117c4565b91505b505b60005b818110156108f95761109e848760c00151633b9aca00610fd391906117c4565b935083156108f95760010161107e565b600081815260208190526040812054906110c88383610b1b565b9050806060015142106110de5750600092915050565b80516001036110ed5750919050565b60408101516110fa6114f2565b6111048583610b1b565b905080606001514210156111255780602001519350806040015191506110fa565b61112f8585610b1b565b9250806080015160001415801561115857508060800151836060015161115591906117c4565b42105b1561116857506000949350505050565b505050919050565b60008160000361118257506000610a1b565b600061118e8684610b1b565b60e08101519091506001600160a01b03166111ad576000915050610a1b565b60e08101516040516328304d2b60e11b81526004810188905260248101879052604481018690526001600160a01b03909116906350609a5690606401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061184b565b9695505050505050565b600082608001516000036112495750806101fd565b60008360800151846060015161125f9190611778565b905082811061126f5790506101fd565b608084015160009061128183866117c4565b61128b919061186c565b905061129781856117c4565b92505b828411156112b85760808501516112b19084611778565b925061129a565b505092915050565b600082608001516000036112e25782516112db906001611778565b90506101fd565b60008360600151836112f491906117c4565b90508360800151816113069190611880565b8451610a1b9190611778565b83516000036113545760208085015160008781526002835260408082208783529093529190912060589190911b8217609084901b17600160c81b1790556113d2565b60006113608584611234565b90506000821161137a57611375868683610fa9565b61138b565b81600114611388578161138b565b60005b9150600061139986836112c0565b60208088015160008a81526002835260408082208a83529093529190912060589190911b8517609085901b1760c883901b179055905050505b6000858152602081815260408083208690559086015190519091879186917ffda207e5d149787155cf9596283f246f082d4744a57e37dda99146e5dcc542bb91a45050505050565b60008080600019858709858702925082811083820303915050806000036114545783828161144a5761144a6117d7565b0492505050610364565b83811061148957604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6000806040838503121561155a57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b61012081016101fd8284611569565b6000602082840312156115e957600080fd5b5035919050565b6001600160a01b038116811461160557600080fd5b50565b600080600080600080600060e0888a03121561162357600080fd5b87359650602088013595506040880135945060608801359350608088013561164a816115f0565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561167c57600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156116d6576116c2838551611569565b9284019261012092909201916001016116af565b50909695505050505050565b634e487b7160e01b600052602160045260246000fd5b6006811061171657634e487b7160e01b600052602160045260246000fd5b9052565b61014081016117298285611569565b6103646101208301846116f8565b602081016101fd82846116f8565b60006020828403121561175757600080fd5b8151610364816115f0565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fd576101fd611762565b60006020828403121561179d57600080fd5b8151801515811461036457600080fd5b80820281158282048414176101fd576101fd611762565b818103818111156101fd576101fd611762565b634e487b7160e01b600052601260045260246000fd5b6000600182016117ff576117ff611762565b5060010190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561184457600080fd5b5051919050565b60006020828403121561185d57600080fd5b81516006811061036457600080fd5b60008261187b5761187b6117d7565b500690565b60008261188f5761188f6117d7565b50049056fea2646970667358221220b2ae58572f72f49705dde0127d136b3d95d4b37dd6ebd4a2e30eb44f6b572a8b64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da00000000", + "gas": "1563114", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000003cd160a060405234801561001057600080fd5b50604051613cb1380380613cb183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051613bfc6100b5600039600081816101d2015281816102b5015281816105bb015281816107e601528181610b9c01528181610de30152610fc10152613bfc6000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063878003b81162000097578063b1e6d2a1116200006e578063b1e6d2a1146200020b578063c6c116bd1462000222578063ea78803f1462000250578063f12b64a5146200027c57600080fd5b8063878003b814620001b557806388bc2ef314620001cc578063aab68bdb14620001f457600080fd5b80630f85421b14620000e5578063124d91e5146200011b578063303f5dfa146200013457806358178191146200014b57806366d54216146200017b57806375b0d9cd146200019e575b600080fd5b62000108620000f63660046200120d565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b620001326200012c36600462001234565b62000293565b005b62000132620001453660046200126c565b62000599565b620001626200015c36600462001307565b620007c1565b6040516001600160a01b03909116815260200162000112565b620001086200018c36600462001390565b60026020526000908152604090205481565b62000108620001af36600462001390565b62000a1c565b62000108620001c6366004620013aa565b62000ac0565b620001627f000000000000000000000000000000000000000000000000000000000000000081565b620001326200020536600462001234565b62000b7a565b620001326200021c366004620013d9565b62000dc1565b6200010862000233366004620013aa565b600360209081526000928352604080842090915290825290205481565b620001626200026136600462001390565b6000602081905290815260409020546001600160a01b031681565b620001326200028d36600462001426565b62000f9f565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062001459565b6001600160a01b0316146200034b57604051632adfdd0560e21b815260040160405180910390fd5b600083815260208181526040808320546001600160a01b03888116855260038452828520888652909352908320549116918215620003f6576040516370a0823160e01b81526001600160a01b0388811660048301528416906370a0823190602401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062001479565b620003f9565b60005b9050620004078282620014a9565b8511156200042857604051631cf2628760e31b815260040160405180910390fd5b6000811562000448578583106200044157600062000445565b8286035b90505b808603868214620004ce576001600160a01b03891660009081526003602090815260408083208b845290915290205462000484908290620014c5565b6001600160a01b038a1660009081526003602090815260408083208c8452825280832093909355600290522054620004be908290620014c5565b6000898152600260205260409020555b81156200053a57604051632770a7eb60e21b81526001600160a01b038a8116600483015260248201849052861690639dc29fac90604401600060405180830381600087803b1580156200052057600080fd5b505af115801562000535573d6000803e3d6000fd5b505050505b604080518881526020810186905290810184905233606082015288906001600160a01b038b16907fa6a919b3314fbbdb84c4a64d62f381f104d0c1747b789163262d2fcfeec292689060800160405180910390a3505050505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000629919062001459565b6001600160a01b0316146200065157604051632adfdd0560e21b815260040160405180910390fd5b6000848152602081905260409020546001600160a01b03168062000688576040516339e231e760e11b815260040160405180910390fd5b6001600160a01b038616600090815260036020908152604080832088845290915290205484811015620006ce5760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0387811660009081526003602090815260408083208a84528252808320898603905560029091529081902080548890039055516340c10f1960e01b8152858216600482015260248101879052908316906340c10f1990604401600060405180830381600087803b1580156200074957600080fd5b505af11580156200075e573d6000803e3d6000fd5b505060408051848152602081018990526001600160a01b038881168284015233606083015291518a9450918b1692507fde5600808a2321d39207ba773327f7a932a4b0b019107fb5a95618006cd0ff00919081900360800190a350505050505050565b604051632eec7b5560e11b815260048101879052600090879033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062001459565b6001600160a01b0316146200087c57604051632adfdd0560e21b815260040160405180910390fd5b60008690036200089f576040516392bf449d60e01b815260040160405180910390fd5b6000849003620008c25760405163571431a760e01b815260040160405180910390fd5b6000888152602081905260409020546001600160a01b031615620008f9576040516329518c2b60e21b815260040160405180910390fd5b82156200094c578287878787306040516200091490620011e6565b6200092495949392919062001504565b8190604051809103906000f590508015801562000945573d6000803e3d6000fd5b506200098e565b86868686306040516200095f90620011e6565b6200096f95949392919062001504565b604051809103906000f0801580156200098c573d6000803e3d6000fd5b505b60008981526020818152604080832080546001600160a01b0319166001600160a01b0386169081179091558084526001909252918290208b905590519193509089907fb4510654a5884cae50948507300dc482833ed1446cef375e064bef00b6b4ba4e9062000a09908b908b908b908b908b9033906200154a565b60405180910390a3509695505050505050565b60008181526002602090815260408083205491839052909120546001600160a01b0316801562000aba57806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a85573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aab919062001479565b62000ab79083620014a9565b91505b50919050565b6001600160a01b0380831660009081526003602090815260408083208584528252808320549183905290912054909116801562000b73576040516370a0823160e01b81526001600160a01b0385811660048301528216906370a0823190602401602060405180830381865afa15801562000b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b64919062001479565b62000b709083620014a9565b91505b5092915050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000be4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0a919062001459565b6001600160a01b03161462000c3257604051632adfdd0560e21b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b0316801580159062000cbe576040516340c10f1960e01b81526001600160a01b038781166004830152602482018690528316906340c10f1990604401600060405180830381600087803b15801562000c9f57600080fd5b505af115801562000cb4573d6000803e3d6000fd5b5050505062000d39565b6001600160a01b038616600090815260036020908152604080832088845290915290205462000cef908590620014a9565b6001600160a01b038716600090815260036020908152604080832089845282528083209390935560029052205462000d29908590620014a9565b6000868152600260205260409020555b6001600160d01b0362000d4c8662000a1c565b111562000d6c57604051633062f38960e11b815260040160405180910390fd5b6040805185815282151560208201523381830152905186916001600160a01b038916917f0153be209252ccc3b70df14d55d2cc93fa5a74e263b163d9a1caf45152fd0e869181900360600190a3505050505050565b604051632eec7b5560e11b815260048101849052839033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562000e2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e51919062001459565b6001600160a01b03161462000e7957604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b03831662000ea15760405163c6587bab60e01b815260040160405180910390fd5b6001600160a01b03851660009081526003602090815260408083208784529091529020548083111562000ee75760405163db446d8360e01b815260040160405180910390fd5b6001600160a01b0380871660009081526003602081815260408084208a85528252808420888703905593881683529081528282208883529052205462000f2f908490620014a9565b6001600160a01b0385811660008181526003602090815260408083208b84528252918290209490945580518781523394810194909452909288928a16917f6d86dde1e9f07a2ad1e0f3e611b7bb8343d629126c5ca73f1a5951177d87143f910160405180910390a4505050505050565b604051632eec7b5560e11b815260048101839052829033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801562001009573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102f919062001459565b6001600160a01b0316146200105757604051632adfdd0560e21b815260040160405180910390fd5b6001600160a01b0382166200107f576040516324679e7b60e01b815260040160405180910390fd5b6000838152602081905260409020546001600160a01b031615620010b65760405163934c465560e01b815260040160405180910390fd5b6001600160a01b03821660009081526001602052604090205415620010ee5760405163934c465560e01b815260040160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001153919062001599565b60ff166012146200117757604051632b70e32560e21b815260040160405180910390fd5b60008381526020818152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260018352928190208690555133815285917f768e177d7f9dac714049e6d43d9ac533cf0c6cc23cddcfe642bfd7a18bee3772910160405180910390a3505050565b61260880620015bf83390190565b6001600160a01b03811681146200120a57600080fd5b50565b6000602082840312156200122057600080fd5b81356200122d81620011f4565b9392505050565b6000806000606084860312156200124a57600080fd5b83356200125781620011f4565b95602085013595506040909401359392505050565b600080600080608085870312156200128357600080fd5b84356200129081620011f4565b935060208501359250604085013591506060850135620012b081620011f4565b939692955090935050565b60008083601f840112620012ce57600080fd5b50813567ffffffffffffffff811115620012e757600080fd5b6020830191508360208285010111156200130057600080fd5b9250929050565b600080600080600080608087890312156200132157600080fd5b86359550602087013567ffffffffffffffff808211156200134157600080fd5b6200134f8a838b01620012bb565b909750955060408901359150808211156200136957600080fd5b506200137889828a01620012bb565b979a9699509497949695606090950135949350505050565b600060208284031215620013a357600080fd5b5035919050565b60008060408385031215620013be57600080fd5b8235620013cb81620011f4565b946020939093013593505050565b60008060008060808587031215620013f057600080fd5b8435620013fd81620011f4565b93506020850135925060408501356200141681620011f4565b9396929550929360600135925050565b600080604083850312156200143a57600080fd5b8235915060208301356200144e81620011f4565b809150509250929050565b6000602082840312156200146c57600080fd5b81516200122d81620011f4565b6000602082840312156200148c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620014bf57620014bf62001493565b92915050565b81810381811115620014bf57620014bf62001493565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200151a606083018789620014db565b82810360208401526200152f818688620014db565b91505060018060a01b03831660408301529695505050505050565b6080815260006200156060808301888a620014db565b828103602084015262001575818789620014db565b604084019590955250506001600160a01b0391909116606090910152949350505050565b600060208284031215620015ac57600080fd5b815160ff811681146200122d57600080fdfe6101606040523480156200001257600080fd5b50604051620026083803806200260883398101604081905262000035916200030f565b808380604051806040016040528060018152602001603160f81b815250868681600390816200006591906200042d565b5060046200007482826200042d565b50620000869150839050600562000174565b610120526200009781600662000174565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001ad565b5050505062000553565b600060208351101562000194576200018c83620001ff565b9050620001a7565b81620001a184826200042d565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200022d578260405163305a27a960e01b8152600401620001569190620004f9565b80516200023a826200052e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002755781810151838201526020016200025b565b50506000910152565b600082601f8301126200029057600080fd5b81516001600160401b0380821115620002ad57620002ad62000242565b604051601f8301601f19908116603f01168101908282118183101715620002d857620002d862000242565b81604052838152866020858801011115620002f257600080fd5b6200030584602083016020890162000258565b9695505050505050565b6000806000606084860312156200032557600080fd5b83516001600160401b03808211156200033d57600080fd5b6200034b878388016200027e565b945060208601519150808211156200036257600080fd5b5062000371868287016200027e565b604086015190935090506001600160a01b03811681146200039157600080fd5b809150509250925092565b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000428576000816000526020600020601f850160051c81016020861015620004035750805b601f850160051c820191505b8181101562000424578281556001016200040f565b5050505b505050565b81516001600160401b0381111562000449576200044962000242565b62000461816200045a84546200039c565b84620003d8565b602080601f831160018114620004995760008415620004805750858301515b600019600386901b1c1916600185901b17855562000424565b600085815260208120601f198616915b82811015620004ca57888601518255948401946001909101908401620004a9565b5085821015620004e95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200051a81604085016020870162000258565b601f01601f19169190910160400192915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161205a620005ae6000396000610ee801526000610ebb01526000610c0401526000610bdc01526000610b3701526000610b6101526000610b8b015261205a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103d9578063dd62ed3e146103ec578063f1127ed814610425578063f2fde38b1461046457600080fd5b80639dc29fac146103a0578063a9059cbb146103b3578063c3cda520146103c657600080fd5b80638e539e8c116100d35780638e539e8c1461035357806391ddadf41461036657806395d89b41146103855780639ab24eb01461038d57600080fd5b80637ecebe001461031457806384b0196e146103275780638da5cb5b1461034257600080fd5b806340c10f19116101665780635c19a95c116101405780635c19a95c146102be5780636fcfff45146102d157806370a08231146102f9578063715018a61461030c57600080fd5b806340c10f191461025d5780634bf5d7e914610272578063587cde1e1461027a57600080fd5b806323b872dd116101a257806323b872dd14610220578063313ce567146102335780633644e515146102425780633a46b1a81461024a57600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d1610477565b6040516101de9190611c5b565b60405180910390f35b6101fa6101f5366004611c8a565b610509565b60405190151581526020016101de565b610212610523565b6040519081526020016101de565b6101fa61022e366004611cb4565b610533565b604051601281526020016101de565b610212610557565b610212610258366004611c8a565b610561565b61027061026b366004611c8a565b6105e7565b005b6101d16105fd565b6102a6610288366004611cf0565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101de565b6102706102cc366004611cf0565b610675565b6102e46102df366004611cf0565b610680565b60405163ffffffff90911681526020016101de565b610212610307366004611cf0565b61068b565b6102706106a9565b610212610322366004611cf0565b6106bd565b61032f6106c8565b6040516101de9796959493929190611d0b565b600b546001600160a01b03166102a6565b610212610361366004611da4565b61070e565b61036e610778565b60405165ffffffffffff90911681526020016101de565b6101d1610782565b61021261039b366004611cf0565b610791565b6102706103ae366004611c8a565b6107c1565b6101fa6103c1366004611c8a565b6107d3565b6102706103d4366004611dce565b6107e1565b6102706103e7366004611e26565b61089e565b6102126103fa366004611e90565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610438610433366004611ec3565b6109d8565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101de565b610270610472366004611cf0565b6109fd565b60606003805461048690611f03565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611f03565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b600033610517818585610a3b565b60019150505b92915050565b600061052e60025490565b905090565b600033610541858285610a4d565b61054c858585610acb565b506001949350505050565b600061052e610b2a565b60008061056c610778565b90508065ffffffffffff1683106105ac57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105d66105b884610c55565b6001600160a01b038616600090815260096020526040902090610c8c565b6001600160d01b0316949350505050565b6105ef610d42565b6105f98282610d6f565b5050565b6060610607610da5565b65ffffffffffff16610617610778565b65ffffffffffff161461063d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105f98183610db0565b600061051d82610e22565b6001600160a01b03811660009081526020819052604081205461051d565b6106b1610d42565b6106bb6000610e44565b565b600061051d82610e96565b6000606080600080600060606106dc610eb4565b6106e4610ee1565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610719610778565b90508065ffffffffffff16831061075457604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016105a3565b61076861076084610c55565b600a90610c8c565b6001600160d01b03169392505050565b600061052e610da5565b60606004805461048690611f03565b6001600160a01b03811660009081526009602052604081206107b290610f0e565b6001600160d01b031692915050565b6107c9610d42565b6105f98282610f47565b600033610517818585610acb565b8342111561080557604051632341d78760e11b8152600481018590526024016105a3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061087f906108779060a00160405160208183030381529060405280519060200120610f7d565b858585610faa565b905061088b8187610fd8565b6108958188610db0565b50505050505050565b834211156108c25760405163313c898160e11b8152600481018590526024016105a3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861090f8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061096a82610f7d565b9050600061097a82878787610faa565b9050896001600160a01b0316816001600160a01b0316146109c1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105a3565b6109cc8a8a8a610a3b565b50505050505050505050565b60408051808201909152600080825260208201526109f6838361102b565b9392505050565b610a05610d42565b6001600160a01b038116610a2f57604051631e4fbdf760e01b8152600060048201526024016105a3565b610a3881610e44565b50565b610a488383836001611061565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ac55781811015610ab657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105a3565b610ac584848484036000611061565b50505050565b6001600160a01b038316610af557604051634b637e8f60e11b8152600060048201526024016105a3565b6001600160a01b038216610b1f5760405163ec442f0560e01b8152600060048201526024016105a3565b610a48838383611136565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610bad57507f000000000000000000000000000000000000000000000000000000000000000090565b61052e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610c88576040516306dfcc6560e41b815260306004820152602481018390526044016105a3565b5090565b815460009081816005811115610ceb576000610ca784611141565b610cb19085611f53565b60008881526020902090915081015465ffffffffffff9081169087161015610cdb57809150610ce9565b610ce6816001611f66565b92505b505b6000610cf987878585611229565b90508015610d3457610d1e87610d10600184611f53565b600091825260209091200190565b54600160301b90046001600160d01b0316610d37565b60005b979650505050505050565b600b546001600160a01b031633146106bb5760405163118cdaa760e01b81523360048201526024016105a3565b6001600160a01b038216610d995760405163ec442f0560e01b8152600060048201526024016105a3565b6105f960008383611136565b600061052e43610c55565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610a488183610e1d8661128b565b611296565b6001600160a01b03811660009081526009602052604081205461051d90611402565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811660009081526007602052604081205461051d565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006005611433565b606061052e7f00000000000000000000000000000000000000000000000000000000000000006006611433565b80546000908015610f3e57610f2883610d10600184611f53565b54600160301b90046001600160d01b03166109f6565b60009392505050565b6001600160a01b038216610f7157604051634b637e8f60e11b8152600060048201526024016105a3565b6105f982600083611136565b600061051d610f8a610b2a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610fbc888888886114de565b925092509250610fcc82826115ad565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610a48576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016105a3565b60408051808201909152600080825260208201526001600160a01b03831660009081526009602052604090206109f69083611666565b6001600160a01b03841661108b5760405163e602df0560e01b8152600060048201526024016105a3565b6001600160a01b0383166110b557604051634a1406b160e11b8152600060048201526024016105a3565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ac557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161112891815260200190565b60405180910390a350505050565b610a488383836116d6565b60008160000361115357506000919050565b600060016111608461173c565b901c6001901b9050600181848161117957611179611f79565b048201901c9050600181848161119157611191611f79565b048201901c905060018184816111a9576111a9611f79565b048201901c905060018184816111c1576111c1611f79565b048201901c905060018184816111d9576111d9611f79565b048201901c905060018184816111f1576111f1611f79565b048201901c9050600181848161120957611209611f79565b048201901c90506109f68182858161122357611223611f79565b046117d0565b60005b8183101561128357600061124084846117e6565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561126f5780925061127d565b61127a816001611f66565b93505b5061122c565b509392505050565b600061051d8261068b565b816001600160a01b0316836001600160a01b0316141580156112b85750600081115b15610a48576001600160a01b03831615611360576001600160a01b038316600090815260096020526040812081906112fb906118016112f68661180d565b611841565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611355929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610a48576001600160a01b038216600090815260096020526040812081906113999061187a6112f68661180d565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516113f3929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610c88576040516306dfcc6560e41b815260206004820152602481018390526044016105a3565b606060ff831461144d5761144683611886565b905061051d565b81805461145990611f03565b80601f016020809104026020016040519081016040528092919081815260200182805461148590611f03565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b5050505050905061051d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561151957506000915060039050826115a3565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561156d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611599575060009250600191508290506115a3565b9250600091508190505b9450945094915050565b60008260038111156115c1576115c1611f8f565b036115ca575050565b60018260038111156115de576115de611f8f565b036115fc5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561161057611610611f8f565b036116315760405163fce698f760e01b8152600481018290526024016105a3565b600382600381111561164557611645611f8f565b036105f9576040516335e2f38360e21b8152600481018290526024016105a3565b6040805180820190915260008082526020820152826000018263ffffffff168154811061169557611695611fa5565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6116e18383836118c5565b6001600160a01b0383166117315760006116f9610523565b90506001600160d01b038082111561172e57604051630e58ae9360e11b815260048101839052602481018290526044016105a3565b50505b610a488383836119ef565b600080608083901c1561175157608092831c92015b604083901c1561176357604092831c92015b602083901c1561177557602092831c92015b601083901c1561178757601092831c92015b600883901c1561179957600892831c92015b600483901c156117ab57600492831c92015b600283901c156117bd57600292831c92015b600183901c1561051d5760010192915050565b60008183106117df57816109f6565b5090919050565b60006117f56002848418611fbb565b6109f690848416611f66565b60006109f68284611fdd565b60006001600160d01b03821115610c88576040516306dfcc6560e41b815260d06004820152602481018390526044016105a3565b60008061186d61184f610778565b61186561185b88610f0e565b868863ffffffff16565b879190611a65565b915091505b935093915050565b60006109f68284612004565b6060600061189383611a73565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b0383166118f05780600260008282546118e59190611f66565b909155506119629050565b6001600160a01b038316600090815260208190526040902054818110156119435760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105a3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661197e5760028054829003905561199d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e291815260200190565b60405180910390a3505050565b6001600160a01b038316611a1157611a0e600a61187a6112f68461180d565b50505b6001600160a01b038216611a3357611a30600a6118016112f68461180d565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610a4892918216911683611296565b60008061186d858585611a9b565b600060ff8216601f81111561051d57604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611bba576000611ab987610d10600185611f53565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015611b0d57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603611b595784611b3088610d10600186611f53565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611baa565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506118729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081611872565b6000815180845260005b81811015611c3b57602081850181015186830182015201611c1f565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109f66020830184611c15565b80356001600160a01b0381168114611c8557600080fd5b919050565b60008060408385031215611c9d57600080fd5b611ca683611c6e565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b611cd284611c6e565b9250611ce060208501611c6e565b9150604084013590509250925092565b600060208284031215611d0257600080fd5b6109f682611c6e565b60ff60f81b881681526000602060e06020840152611d2c60e084018a611c15565b8381036040850152611d3e818a611c15565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611d9257835183529284019291840191600101611d76565b50909c9b505050505050505050505050565b600060208284031215611db657600080fd5b5035919050565b803560ff81168114611c8557600080fd5b60008060008060008060c08789031215611de757600080fd5b611df087611c6e565b95506020870135945060408701359350611e0c60608801611dbd565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611e4157600080fd5b611e4a88611c6e565b9650611e5860208901611c6e565b95506040880135945060608801359350611e7460808901611dbd565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ea357600080fd5b611eac83611c6e565b9150611eba60208401611c6e565b90509250929050565b60008060408385031215611ed657600080fd5b611edf83611c6e565b9150602083013563ffffffff81168114611ef857600080fd5b809150509250929050565b600181811c90821680611f1757607f821691505b602082108103611f3757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051d5761051d611f3d565b8082018082111561051d5761051d611f3d565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611fd857634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b03828116828216039080821115611ffd57611ffd611f3d565b5092915050565b6001600160d01b03818116838216019080821115611ffd57611ffd611f3d56fea2646970667358221220769c11045215fe2d8701ceef367511c48fbdd6283f4b82d858498b3dfe8690b864736f6c63430008170033a264697066735822122073126911d81a525b605890cb2a469a60c2779b4bf2ef152820cc1957f54815c864736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000", + "gas": "3636651", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000fa260a060405234801561001057600080fd5b50604051610f82380380610f8283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610ef16100916000396000818160e1015261034c0152610ef16000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638ca53ccd1161005b5780638ca53ccd1461011b578063971e46771461012e57806399195fde14610143578063c8668bfd1461016357600080fd5b806301ffc9a71461008257806329ed16cd146100bb57806388bc2ef3146100dc575b600080fd5b6100a6610090366004610ae5565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b6100ce6100c9366004610b2e565b610176565b6040519081526020016100b2565b6101037f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b2565b6100ce610129366004610b2e565b610258565b61014161013c366004610b80565b61032a565b005b610156610151366004610c03565b610831565b6040516100b29190610c4d565b610156610171366004610c03565b610990565b600085815260016020908152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156101ee57602002820191906000526020600020905b8154815260200190600101908083116101da575b505050505090506000815190506000805b8281101561024a5783818151811061021957610219610c9c565b6020026020010151915060e082901c860361024257506001600160e01b0316925061024f915050565b6001016101ff565b505050505b95945050505050565b60008581526020818152604080832087845282528083206001600160a01b03808816855290835281842090861684528252808320805482518185028101850190935280835284938301828280156102ce57602002820191906000526020600020905b8154815260200190600101908083116102ba575b505050505090506000815190506000805b8281101561024a578381815181106102f9576102f9610c9c565b6020026020010151915060e082901c860361032257506001600160e01b0316925061024f915050565b6001016102df565b604051632eec7b5560e11b815260048101859052849033906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190610cb2565b6001600160a01b0316146103de57604051632adfdd0560e21b815260040160405180910390fd5b813660005b82811015610827578585828181106103fd576103fd610c9c565b905060200281019061040f9190610ccf565b915060006104206040840184610cef565b905090503660005b828110156105f35761043d6040860186610cef565b8281811061044d5761044d610c9c565b604002919091019250506001600160e01b038235111561048057604051634966bf4b60e01b815260040160405180910390fd5b63ffffffff602083013511156104a957604051633bbf530360e01b815260040160405180910390fd5b80158015906104ec57506104c06040860186610cef565b6104cb600184610d40565b8181106104da576104da610c9c565b90506040020160200135826020013511155b1561050a5760405163d33e7dc560e01b815260040160405180910390fd5b8135156105eb5760008b8152602081815260408083208d84529091528120908a8a8781811061053b5761053b610c9c565b905060200281019061054d9190610ccf565b61055b906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8781811061058f5761058f610c9c565b90506020028101906105a19190610ccf565b6105b2906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b600101610428565b5060006106036060860186610cef565b905090503660005b828110156107db576106206060880188610cef565b8281811061063057610630610c9c565b604002919091019250506001600160e01b038235111561066357604051630ee68a2560e41b815260040160405180910390fd5b63ffffffff6020830135111561068f5760405160016221181f60e11b0319815260040160405180910390fd5b80158015906106d257506106a66060880188610cef565b6106b1600184610d40565b8181106106c0576106c0610c9c565b90506040020160200135826020013511155b156106f0576040516377827f8160e01b815260040160405180910390fd5b8135156107d35760008d81526001602090815260408083208f84529091528120908c8c8981811061072357610723610c9c565b90506020028101906107359190610ccf565b610743906020810190610d67565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008c8c8981811061077757610777610c9c565b90506020028101906107899190610ccf565b61079a906040810190602001610d67565b6001600160a01b0316815260208082019290925260400160009081208054600181018255908252908290209184013560e01b8435179101555b60010161060b565b508b8b7f47b77e92dfe8d78eade5a1159cd1f4a33a5215f683ed03d825851720ccf90450883360405161080f929190610e0e565b60405180910390a35050600190920191506103e39050565b5050505050505050565b60008481526020818152604080832086845282528083206001600160a01b038087168552908352818420908516845282528083208054825181850281018501909352808352606094938301828280156108a957602002820191906000526020600020905b815481526020019060010190808311610895575b50508351939450839250505067ffffffffffffffff8111156108cd576108cd610ea5565b60405190808252806020026020018201604052801561091257816020015b60408051808201909152600080825260208201528152602001906001900390816108eb5790505b5092506000805b828110156109845783818151811061093357610933610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c81525085828151811061097157610971610c9c565b6020908102919091010152600101610919565b50505050949350505050565b600084815260016020908152604080832086845282528083206001600160a01b03808716855290835281842090851684528252808320805482518185028101850190935280835260609493830182828015610a0a57602002820191906000526020600020905b8154815260200190600101908083116109f6575b50508351939450839250505067ffffffffffffffff811115610a2e57610a2e610ea5565b604051908082528060200260200182016040528015610a7357816020015b6040805180820190915260008082526020820152815260200190600190039081610a4c5790505b5092506000805b8281101561098457838181518110610a9457610a94610c9c565b602002602001015191506040518060400160405280836001600160e01b0316815260200160e084901c815250858281518110610ad257610ad2610c9c565b6020908102919091010152600101610a7a565b600060208284031215610af757600080fd5b81356001600160e01b031981168114610b0f57600080fd5b9392505050565b6001600160a01b0381168114610b2b57600080fd5b50565b600080600080600060a08688031215610b4657600080fd5b85359450602086013593506040860135610b5f81610b16565b92506060860135610b6f81610b16565b949793965091946080013592915050565b60008060008060608587031215610b9657600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115610bbc57600080fd5b818701915087601f830112610bd057600080fd5b813581811115610bdf57600080fd5b8860208260051b8501011115610bf457600080fd5b95989497505060200194505050565b60008060008060808587031215610c1957600080fd5b84359350602085013592506040850135610c3281610b16565b91506060850135610c4281610b16565b939692955090935050565b602080825282518282018190526000919060409081850190868401855b82811015610c8f57815180518552860151868501529284019290850190600101610c6a565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cc457600080fd5b8151610b0f81610b16565b60008235607e19833603018112610ce557600080fd5b9190910192915050565b6000808335601e19843603018112610d0657600080fd5b83018035915067ffffffffffffffff821115610d2157600080fd5b6020019150600681901b3603821315610d3957600080fd5b9250929050565b81810381811115610d6157634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610d7957600080fd5b8135610b0f81610b16565b6000808335601e19843603018112610d9b57600080fd5b830160208101925035905067ffffffffffffffff811115610dbb57600080fd5b8060061b3603821315610d3957600080fd5b8183526000602080850194508260005b85811015610e035781358752828201358388015260409687019690910190600101610ddd565b509495945050505050565b6040815260008335610e1f81610b16565b6001600160a01b039081166040840152602085013590610e3e82610b16565b8082166060850152610e536040870187610d84565b9250608080860152610e6960c086018483610dcd565b925050610e796060870187610d84565b858403603f190160a0870152610e90848284610dcd565b94505050808516602085015250509392505050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b41efe55f87e0e156c25f6dd631378e65a39e161acb0cd160bee6d403fb729ca64736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da000000000000000000000000000000000000000000000000000000000000", + "gas": "956184", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005f266101806040523480156200001257600080fd5b5060405162005e2638038062005e2683398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615b0162000325600039600081816105da01526126e00152600081816102de0152818161232f0152818161265901526132d201526000818161028c01528181610cd001528181610e05015281816111bb015281816115b201528181611868015281816121840152818161242501528181612b83015281816133c301528181613445015281816135a8015281816136f30152818161377a015261392901526000818161056601528181610a6201528181610c0701528181610d5901528181610f30015281816113570152818161173201528181611790015281816118fd01528181611a6701528181611ac701528181611d43015281816125510152612a310152600081816104450152818161076f01528181610b10015281816114d101528181611bd401528181611e4401528181611f84015281816128ca015261365a015260008181610326015281816106c1015281816109d601528181610e9c015281816110db01528181611262015281816113f901528181611dd40152818161229d015281816123840152612ace0152600081816103c40152818161041c01526131390152600081816105b301528181612ca70152612d500152615b016000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637da0a87711610125578063c02c63ad116100ad578063d4a1b4b11161007c578063d4a1b4b114610561578063dd5f214a14610588578063f12b64a51461059b578063f434c914146105ae578063ffa08244146105d557600080fd5b8063c02c63ad14610506578063c1ec61ee14610519578063c5b19b0e1461053b578063c7fb92de1461054e57600080fd5b8063a2d532e6116100f4578063a2d532e61461048d578063a312889b146104a0578063b1a50e33146104c0578063b1e6d2a1146104d3578063b51d6244146104e657600080fd5b80637da0a8771461041a57806388bc2ef31461044057806399d25a3414610467578063a0d8e2a91461047a57600080fd5b8063293c4999116101a85780634da781a9116101775780634da781a91461038e5780635338fd9e146103a1578063572b6c05146103b457806358178191146103f4578063702a39771461040757600080fd5b8063293c499914610321578063303f5dfa14610348578063399755711461035b578063419296261461037b57600080fd5b80631d831d5c116101e45780631d831d5c146102875780631ea7bc8c146102c65780631f47ce69146102d957806325a61d5c1461030057600080fd5b806301ffc9a7146102165780630634bae91461023e5780630a1181ed1461025f57806313aef73514610274575b600080fd5b610229610224366004613cb4565b6105fc565b60405190151581526020015b60405180910390f35b61025161024c366004613f27565b61069f565b604051908152602001610235565b61027261026d366004613ff6565b610842565b005b610251610282366004614084565b610965565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b6102516102d43660046140cf565b6109b1565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61031361030e36600461416a565b610bda565b6040516102359291906142d5565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102726103563660046142f2565b610c8f565b61025161036936600461433c565b60006020819052908152604090205481565b61031361038936600461433c565b610d33565b61025161039c36600461433c565b610de0565b6102726103af366004614355565b610e82565b6102296103c2366004614385565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102ae6104023660046143a2565b6110b6565b610272610415366004614084565b611248565b7f00000000000000000000000000000000000000000000000000000000000000006102ae565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61022961047536600461433c565b611332565b610251610488366004614423565b6113d4565b61027261049b36600461449c565b6114c8565b6104b36104ae36600461433c565b611673565b6040516102359190614544565b6102296104ce36600461433c565b61170d565b6102726104e1366004614557565b61176b565b6104f96104f436600461459f565b6118cb565b60405161023591906145cb565b61031361051436600461433c565b611a41565b61052c61052736600461433c565b611a9e565b6040516102359392919061462e565b610272610549366004614678565b611b52565b61025161055c3660046146bd565b611cfd565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b610272610596366004614738565b612283565b6102726105a9366004614355565b61236a565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166344d5b87560e01b148061062d57506001600160e01b031982166334ce2c7b60e21b145b8061064857506001600160e01b03198216632877540760e01b145b8061066357506001600160e01b031982166362d8cd8760e11b145b8061067e57506001600160e01b03198216633d0d324560e21b145b8061069957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60405163180e2b1160e31b81526001600160a01b0389811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c0715888906024016020604051808303816000875af115801561070c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610730919061478a565b90508615610753576000818152600160205260409020610751888a83614825565b505b6040516338a73f9960e11b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b5050505060006107e0828888612485565b90506107ed828686612776565b7f8dac501f24f52bda9ebdfa6a1789878c1d1e23823c771f7d52b5ba41261b0f4581838b8b8761081b61293b565b60405161082d9695949392919061490e565b60405180910390a15098975050505050505050565b33301461084e57600080fd5b6108626001600160a01b038616888661294a565b60405163fef4325760e01b81526001600160a01b0388169063fef432579061089b9089908990899089906000908a908a9060040161495c565b6020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061478a565b50604051636eb1769f60e11b81523060048201526001600160a01b03888116602483015286169063dd62ed3e90604401602060405180830381865afa15801561092b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094f919061478a565b1561095c5761095c6149b7565b50505050505050565b60006109a78484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0e92505050565b90505b9392505050565b6040516331a9108f60e11b815260048101879052600090610a49906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4191906149cd565b886002612c49565b6040516319fade8560e11b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333f5bd0a90602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad5919061478a565b1115610af457604051633ea420bb60e01b815260040160405180910390fd5b6040516338a73f9960e11b8152600481018890523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063714e7f3290604401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b50505050610b7f878787612485565b9050610b8c878585612776565b7f23164adda696b19106c2eef50ba44461997682bf5aeb9fdb383117fa9952cc75818884610bb861293b565b604051610bc894939291906149ea565b60405180910390a19695505050505050565b610be2613b62565b610bea613bb7565b604051630969875760e21b815260048101859052602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325a61d5c9060440161012060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190614aad565b9150610c8682612ddb565b90509250929050565b610c9b8484600c612c49565b60405163181faefd60e11b81526001600160a01b038581166004830152602482018590526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063303f5dfa906084015b600060405180830381600087803b158015610d1557600080fd5b505af1158015610d29573d6000803e3d6000fd5b5050505050505050565b610d3b613b62565b610d43613bb7565b6040516321d1336160e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c2906024015b61012060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190614aad565b9150610dd982612ddb565b9050915091565b6000818152602081905260408082205490516375b0d9cd60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b0d9cd90602401602060405180830381865afa158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e78919061478a565b6106999190614ae0565b6040516331a9108f60e11b815260048101839052610f17907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906149cd565b836004612c49565b6040516321d1336160e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614aad565b61010081015190915060491c600190811614610fd35760405163719d422360e11b815260040160405180910390fd5b60008381526020819052604090205415611002576110008360405180602001604052806000815250612a0e565b505b6040516362d8cd8760e11b8152306004820152602481018490526001600160a01b0383169063c5b19b0e90604401600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b50505050827f6d2afe69329448f0491521e53921343cc696596a49f64a5502a27935e6a482f98361108d61293b565b604080516001600160a01b039384168152929091166020830152015b60405180910390a2505050565b6040516331a9108f60e11b81526004810187905260009061114e906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906149cd565b886008612c49565b81156111a45761115c61293b565b8260405160200161118b92919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b6040516020818303038152906040528051906020012091505b604051635817819160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358178191906111fa908a908a908a908a908a908a90600401614af3565b6020604051808303816000875af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d91906149cd565b979650505050505050565b6040516331a9108f60e11b8152600481018490526112dd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906149cd565b846007612c49565b60008381526001602052604090206112f6828483614825565b50827f76f445b3718cf71aa0c056105beab456eba31f72f5cc5a60fde060fd14ea1684838361132361293b565b6040516110a993929190614b34565b6040516321d1336160e11b8152600481018290526000906113c9906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c2906024015b61012060405180830381865afa1580156113a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c49190614aad565b612ddb565b610120015192915050565b6040516331a9108f60e11b81526004810186905260009061146c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146491906149cd565b876002612c49565b611477868686612485565b90507f24d02d612b06648bfa2000859f3de7e6f336139eaf5877c24b0d213206252862818785856114a661293b565b6040516114b7959493929190614b60565b60405180910390a195945050505050565b61157a8585600b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8961150761293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190614b9a565b612eea565b8260000361159b57604051637b38547b60e01b815260040160405180910390fd5b60405163124d91e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063124d91e5906115eb90889088908890600401614bb7565b600060405180830381600087803b15801561160557600080fd5b505af1158015611619573d6000803e3d6000fd5b5050505083856001600160a01b03167fdf04e13ee4fcd48a81ab2fd114757093740a3efa9b6475d86e05878b4c59d07985858561165461293b565b6040516116649493929190614bd8565b60405180910390a35050505050565b6001602052600090815260409020805461168c906147a3565b80601f01602080910402602001604051908101604052809291908181526020018280546116b8906147a3565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b6040516321d1336160e11b815260048101829052600090611761906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c290602401611382565b60e0015192915050565b6117778484600d612c49565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190614aad565b61010081015190915060451c6001908116036118335760405163063a016960e01b815260040160405180910390fd5b60405163b1e6d2a160e01b81526001600160a01b038681166004830152602482018690528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063b1e6d2a190608401600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505050505050565b604051632d47589160e21b81526004810184905260248101839052604481018290526060906000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b51d624490606401600060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261196c9190810190614c2e565b8051909150806001600160401b0381111561198957611989613d8f565b6040519080825280602002602001820160405280156119c257816020015b6119af613c3b565b8152602001906001900390816119a75790505b5092506119cd613b62565b60005b82811015611a36578381815181106119ea576119ea614cce565b602002602001015191506040518060400160405280838152602001611a0e84612ddb565b815250858281518110611a2357611a23614cce565b60209081029190910101526001016119d0565b505050509392505050565b611a49613b62565b611a51613bb7565b60405163c02c63ad60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c02c63ad90602401610d8c565b611aa6613b62565b611aae613bb7565b6040516360f630f760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1ec61ee9060240161014060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190614ce4565b9093509050611b4983612ddb565b91509193909250565b6040516301ffc9a760e01b81526334ce2c7b60e21b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614b9a565b8015611c6c5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635dd8f6aa836040518263ffffffff1660e01b8152600401611c2091815260200190565b602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906149cd565b6001600160a01b0316145b15611cf95760405163a312889b60e01b8152600481018290526001600160a01b0383169063a312889b90602401600060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cde9190810190614d17565b600082815260016020526040902090611cf79082614d84565b505b5050565b600085600003611d20576040516327f44f9560e21b815260040160405180910390fd5b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614aad565b6040516331a9108f60e11b8152600481018b9052909150611f5c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3f91906149cd565b8a600a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8e611e7a61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee89190614b9a565b80611f135750610100850151604f1c6001600160a01b0316611f0861293b565b6001600160a01b0316145b8061157557506000611f2a866101000151604f1c90565b6001600160a01b0316141580156115755750610100850151604f1c6001600160a01b031663677ce0888e61150761293b565b602081015115801590611f7b575061010081015160461c600190811614155b801561202a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e49181f8a611fba61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120289190614b9a565b155b80156120575750610100810151604f1c6001600160a01b031661204b61293b565b6001600160a01b031614155b801561210f5750600061206f826101000151604f1c90565b6001600160a01b0316148061210f5750610100810151604f1c6001600160a01b031663677ce0888a61209f61293b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614b9a565b155b1561212d57604051633022e3df60e11b815260040160405180910390fd5b83612139576000612147565b61010081015160041c61ffff165b915061271082146121f05761216a8861216284612710614e43565b612710612efa565b60405163aab68bdb60e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906121bd908a908d908890600401614bb7565b600060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050505b8115612224576122008389614e43565b60008a8152602081905260408120805490919061221e908490614ae0565b90915550505b88876001600160a01b03167fe6fee9c572244c0c2238c3112ac12d411750a7ee00eeebd32521c3e5a666c14b8a868a8a8861225d61293b565b60405161226f96959493929190614e56565b60405180910390a350509695505050505050565b6040516331a9108f60e11b815260048101859052612318907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231091906149cd565b856012612c49565b604051636eaf90a560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd5f214a90610cfb908790879087908790600401614e99565b6040516331a9108f60e11b8152600481018390526123ff907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156123d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f791906149cd565b836009612c49565b60405163f12b64a560e01b8152600481018390526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f12b64a590604401600060405180830381600087803b15801561246957600080fd5b505af115801561247d573d6000803e3d6000fd5b505050505050565b600081612490613c60565b60005b8281101561276c578585828181106124ad576124ad614cce565b90506020028101906124bf9190614fef565b6124c890615435565b91506127108260a001516000015111156124f557604051635623289560e01b815260040160405180910390fd5b6127108260a0015160200151111561252057604051639db9ee9360e01b815260040160405180910390fd5b60a08201516040015163ffffffff101561254d5760405163e83c625560e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370174dcc8985602001518660400151876060015188608001516125a08a60a00151612fd3565b8a5160405160e089901b6001600160e01b031916815260048101979097526024870195909552604486019390935260648501919091526001600160a01b0316608484015260a483015260c482015260e401610120604051808303816000875af1158015612611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126359190614aad565b602081015160c0850151604051636eaf90a560e11b81529293506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263dd5f214a9261268e928d92600401615537565b600060405180830381600087803b1580156126a857600080fd5b505af11580156126bc573d6000803e3d6000fd5b505050602082015160e085015160405163971e467760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063971e467792612716928d92600401615639565b600060405180830381600087803b15801561273057600080fd5b505af1158015612744573d6000803e3d6000fd5b505050506001846127559190614e43565b820361276357806020015194505b50600101612493565b5050509392505050565b806000816001600160401b0381111561279157612791613d8f565b6040519080825280602002602001820160405280156127ba578160200160208202803683370190505b5060408051808201909152600081526060602082015290915060005b838110156128ac578585828181106127f0576127f0614cce565b905060200281019061280291906156df565b61280b906156f5565b8051602082015160405163263a91ff60e21b81529294506001600160a01b03909116916398ea47fc91612843918b91906004016157ac565b600060405180830381600087803b15801561285d57600080fd5b505af1158015612871573d6000803e3d6000fd5b50505050816000015183828151811061288c5761288c614cce565b6001600160a01b03909216602092830291909101909101526001016127d6565b50821561247d5760405163104373fb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063821b9fd89061290190899086906004016157ac565b600060405180830381600087803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050505050505050565b6000612945613129565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261299b848261319e565b612a08576040516001600160a01b038481166024830152600060448301526129fe91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613246565b612a088482613246565b50505050565b6040516321d1336160e11b81526004810183905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015612a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9d9190614aad565b60008581526020819052604080822080549083905590516331a9108f60e11b815260048101889052909450919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906149cd565b905060008315612b6157612b5c8684602001516001876132a9565b612b64565b60005b90508015612bef5760405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb90612bbc9085908a908690600401614bb7565b600060405180830381600087803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b505050505b85836000015184602001517feb326a7fb5b385d5b7bf1ee4fb59ebb6d93f11732e206e522cbaf01f813b2ccf8588868b612c2761293b565b604051612c38959493929190615805565b60405180910390a450505092915050565b6000612c5361293b565b9050836001600160a01b0316816001600160a01b031614158015612d14575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d129190614b9a565b155b8015612dbd575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614b9a565b155b15612a085760405163075fd2b160e01b815260040160405180910390fd5b612de3613bb7565b506040805161020081018252610100928301805160041c61ffff9081168352815160141c81166020840152815160241c63ffffffff16938301939093528051600160449190911c811681146060840152815160451c811681146080840152815160461c8116811460a0840152815160471c8116811460c0840152815160481c8116811460e0840152815160491c81168114948301949094528051604a1c841684146101208301528051604b1c841684146101408301528051604c1c841684146101608301528051604d1c841684146101808301528051604e1c84169093146101a08201528251604f1c6001600160a01b03166101c0820152915160ef1c166101e082015290565b80612a0857612a08848484612c49565b6000808060001985870985870292508281108382030391505080600003612f3457838281612f2a57612f2a615848565b04925050506109aa565b838110612f6a57604051630c740aef60e31b81526004810187905260248101869052604481018590526064015b60405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b805160208201516040830151606084015160249190911b60149290921b60049390931b929092171760011790156130105768100000000000000000175b8160800151156130265768200000000000000000175b8160a001511561303c5768400000000000000000175b8160c00151156130525768800000000000000000175b8160e0015115613069576901000000000000000000175b81610100015115613081576902000000000000000000175b81610120015115613099576904000000000000000000175b816101400151156130b1576908000000000000000000175b816101600151156130c9576910000000000000000000175b816101800151156130e1576920000000000000000000175b816101a00151156130f9576940000000000000000000175b6101c08201516101e09092015160ef1b6980000000000000000000600160ef1b03604f9390931b92909216171790565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156131665750808210155b15613196576000366131788385614e43565b61318392829061585e565b61318c91615888565b60601c9250505090565b339250505090565b6000806000846001600160a01b0316846040516131bb91906158bd565b6000604051808303816000865af19150503d80600081146131f8576040519150601f19603f3d011682016040523d82523d6000602084013e6131fd565b606091505b50915091508180156132275750805115806132275750808060200190518101906132279190614b9a565b801561323d57506000856001600160a01b03163b115b95945050505050565b600061325b6001600160a01b038416836139fe565b9050805160001415801561328057508080602001905181019061327e9190614b9a565b155b15611cf757604051635274afe760e01b81526001600160a01b0384166004820152602401612f61565b6040516369e11cc560e01b815260048101859052602481018490526044810183905281906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906369e11cc590606401600060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334991908101906158cf565b805190915060005b818110156139f357600083828151811061336d5761336d614cce565b60200260200101519050600061338c878360200151633b9aca00612efa565b905080156139a45760a08201516001600160a01b0316156135595760a082015160405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aab68bdb916133fb91908e908690600401614bb7565b600060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505060405163ea78803f60e01b8152600481018d9052600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063ea78803f90602401602060405180830381865afa158015613495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b991906149cd565b90508260a001516001600160a01b03166312903a856040518060c00160405280846001600160a01b03168152602001858152602001601281526020018e81526020018c8152602001868152506040518263ffffffff1660e01b815260040161352191906159b9565b600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b5050505050613997565b60608201516000906001600160a01b031661357b5761357661293b565b613581565b82606001515b905082604001516000146139125760405163ea78803f60e01b8152600481018c90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea78803f90602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906149cd565b905060006001600160a01b038216156136ca576040858101519051630862026560e41b815260048101919091526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c591906149cd565b6136cd565b60005b90506001600160a01b03821615806136ec57506001600160a01b038116155b15613778577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb848f876040518463ffffffff1660e01b815260040161374193929190614bb7565b600060405180830381600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b5050505061390b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aab68bdb308f876040518463ffffffff1660e01b81526004016137c893929190614bb7565b600060405180830381600087803b1580156137e257600080fd5b505af11580156137f6573d6000803e3d6000fd5b5050505060008d60405160200161380f91815260200190565b60408051601f1981840301815282825290880151630a1181ed60e01b83529092503091630a1181ed9161384f9186919088908b908b908990600401615a0d565b600060405180830381600087803b15801561386957600080fd5b505af192505050801561387a575060015b613909573d8080156138a8576040519150601f19603f3d011682016040523d82523d6000602084013e6138ad565b606091505b506138c26001600160a01b0385168688613a0c565b8e7feb1c69f596057b3b93b14d290bc52c6ddc7b7fa47184a8be88a30c656eac83e88888846138ef61293b565b6040516138ff9493929190615a5b565b60405180910390a2505b505b5050613995565b60405163aab68bdb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063aab68bdb906139629084908f908790600401614bb7565b600060405180830381600087803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505b505b6139a18187614e43565b95505b87898b7f5b9f38b2a849d80d4925a023ac038581d16642209624dc7b8353077d36a7682485856139d261293b565b6040516139e193929190615a9d565b60405180910390a45050600101613351565b505050949350505050565b60606109aa83836000613a3d565b6040516001600160a01b03838116602483015260448201839052611cf791859182169063a9059cbb906064016129cc565b606081471015613a625760405163cd78605960e01b8152306004820152602401612f61565b600080856001600160a01b03168486604051613a7e91906158bd565b60006040518083038185875af1925050503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150613ad0868383613ada565b9695505050505050565b606082613aef57613aea82613b36565b6109aa565b8151158015613b0657506001600160a01b0384163b155b15613b2f57604051639996b31560e01b81526001600160a01b0385166004820152602401612f61565b50806109aa565b805115613b465780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6040518060400160405280613c4e613b62565b8152602001613c5b613bb7565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001613ca0613bb7565b815260200160608152602001606081525090565b600060208284031215613cc657600080fd5b81356001600160e01b0319811681146109aa57600080fd5b6001600160a01b0381168114613b5f57600080fd5b8035613cfe81613cde565b919050565b60008083601f840112613d1557600080fd5b5081356001600160401b03811115613d2c57600080fd5b602083019150836020828501011115613d4457600080fd5b9250929050565b60008083601f840112613d5d57600080fd5b5081356001600160401b03811115613d7457600080fd5b6020830191508360208260051b8501011115613d4457600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715613dc857613dc8613d8f565b60405290565b60405161020081016001600160401b0381118282101715613dc857613dc8613d8f565b604080519081016001600160401b0381118282101715613dc857613dc8613d8f565b60405160c081016001600160401b0381118282101715613dc857613dc8613d8f565b604051608081016001600160401b0381118282101715613dc857613dc8613d8f565b60405161010081016001600160401b0381118282101715613dc857613dc8613d8f565b604051601f8201601f191681016001600160401b0381118282101715613ea257613ea2613d8f565b604052919050565b60006001600160401b03821115613ec357613ec3613d8f565b50601f01601f191660200190565b600082601f830112613ee257600080fd5b8135613ef5613ef082613eaa565b613e7a565b818152846020838601011115613f0a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060a0898b031215613f4357600080fd5b8835613f4e81613cde565b975060208901356001600160401b0380821115613f6a57600080fd5b613f768c838d01613d03565b909950975060408b0135915080821115613f8f57600080fd5b613f9b8c838d01613d4b565b909750955060608b0135915080821115613fb457600080fd5b613fc08c838d01613d4b565b909550935060808b0135915080821115613fd957600080fd5b50613fe68b828c01613ed1565b9150509295985092959890939650565b600080600080600080600060c0888a03121561401157600080fd5b873561401c81613cde565b965060208801359550604088013561403381613cde565b945060608801359350608088013561404a81613cde565b925060a08801356001600160401b0381111561406557600080fd5b6140718a828b01613d03565b989b979a50959850939692959293505050565b60008060006040848603121561409957600080fd5b8335925060208401356001600160401b038111156140b657600080fd5b6140c286828701613d03565b9497909650939450505050565b600080600080600080608087890312156140e857600080fd5b8635955060208701356001600160401b038082111561410657600080fd5b6141128a838b01613d4b565b9097509550604089013591508082111561412b57600080fd5b6141378a838b01613d4b565b9095509350606089013591508082111561415057600080fd5b5061415d89828a01613ed1565b9150509295509295509295565b6000806040838503121561417d57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b8051825260208101516020830152604081015160408301526060810151614216606084018215159052565b50608081015161422a608084018215159052565b5060a081015161423e60a084018215159052565b5060c081015161425260c084018215159052565b5060e081015161426660e084018215159052565b5061010081810151151590830152610120808201511515908301526101408082015115159083015261016080820151151590830152610180808201511515908301526101a0808201511515908301526101c0808201516001600160a01b0316908301526101e090810151910152565b61032081016142e4828561418c565b6109aa6101208301846141eb565b6000806000806080858703121561430857600080fd5b843561431381613cde565b93506020850135925060408501359150606085013561433181613cde565b939692955090935050565b60006020828403121561434e57600080fd5b5035919050565b6000806040838503121561436857600080fd5b82359150602083013561437a81613cde565b809150509250929050565b60006020828403121561439757600080fd5b81356109aa81613cde565b600080600080600080608087890312156143bb57600080fd5b8635955060208701356001600160401b03808211156143d957600080fd5b6143e58a838b01613d03565b909750955060408901359150808211156143fe57600080fd5b5061440b89828a01613d03565b979a9699509497949695606090950135949350505050565b60008060008060006060868803121561443b57600080fd5b8535945060208601356001600160401b038082111561445957600080fd5b61446589838a01613d4b565b9096509450604088013591508082111561447e57600080fd5b5061448b88828901613d03565b969995985093965092949392505050565b6000806000806000608086880312156144b457600080fd5b85356144bf81613cde565b9450602086013593506040860135925060608601356001600160401b038111156144e857600080fd5b61448b88828901613d03565b60005b8381101561450f5781810151838201526020016144f7565b50506000910152565b600081518084526145308160208601602086016144f4565b601f01601f19169290920160200192915050565b6020815260006109aa6020830184614518565b6000806000806080858703121561456d57600080fd5b843561457881613cde565b935060208501359250604085013561458f81613cde565b9396929550929360600135925050565b6000806000606084860312156145b457600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156146225783516145fc84825161418c565b85015161460d6101208501826141eb565b509284019261032092909201916001016145e7565b50909695505050505050565b610340810161463d828661418c565b61464b6101208301856141eb565b6006831061466957634e487b7160e01b600052602160045260246000fd5b82610320830152949350505050565b6000806040838503121561468b57600080fd5b823561469681613cde565b946020939093013593505050565b8015158114613b5f57600080fd5b8035613cfe816146a4565b60008060008060008060a087890312156146d657600080fd5b863595506020870135945060408701356146ef81613cde565b935060608701356001600160401b0381111561470a57600080fd5b61471689828a01613d03565b909450925050608087013561472a816146a4565b809150509295509295509295565b6000806000806060858703121561474e57600080fd5b843593506020850135925060408501356001600160401b0381111561477257600080fd5b61477e87828801613d4b565b95989497509550505050565b60006020828403121561479c57600080fd5b5051919050565b600181811c908216806147b757607f821691505b6020821081036147d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611cf7576000816000526020600020601f850160051c810160208610156148065750805b601f850160051c820191505b8181101561247d57828155600101614812565b6001600160401b0383111561483c5761483c613d8f565b6148508361484a83546147a3565b836147dd565b6000601f841160018114614884576000851561486c5750838201355b600019600387901b1c1916600186901b1783556148de565b600083815260209020601f19861690835b828110156148b55786850135825560209485019460019092019101614895565b50868210156148d25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b86815285602082015260a06040820152600061492e60a0830186886148e5565b82810360608401526149408186614518565b91505060018060a01b0383166080830152979650505050505050565b878152600060018060a01b03808916602084015287604084015280871660608401525084608083015260e060a0830152600060e08301526101008060c08401526149a981840185876148e5565b9a9950505050505050505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156149df57600080fd5b81516109aa81613cde565b848152836020820152608060408201526000614a096080830185614518565b905060018060a01b038316606083015295945050505050565b8051613cfe81613cde565b60006101208284031215614a4057600080fd5b614a48613da5565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c0820152614a9660e08301614a22565b60e082015261010080830151818301525092915050565b60006101208284031215614ac057600080fd5b6109aa8383614a2d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069957610699614aca565b868152608060208201526000614b0d6080830187896148e5565b8281036040840152614b208186886148e5565b915050826060830152979650505050505050565b604081526000614b486040830185876148e5565b905060018060a01b0383166020830152949350505050565b858152846020820152608060408201526000614b806080830185876148e5565b905060018060a01b03831660608301529695505050505050565b600060208284031215614bac57600080fd5b81516109aa816146a4565b6001600160a01b039390931683526020830191909152604082015260600190565b848152606060208201526000614bf26060830185876148e5565b905060018060a01b038316604083015295945050505050565b60006001600160401b03821115614c2457614c24613d8f565b5060051b60200190565b60006020808385031215614c4157600080fd5b82516001600160401b03811115614c5757600080fd5b8301601f81018513614c6857600080fd5b8051614c76613ef082614c0b565b808282526020820191506101206020818502860101935088841115614c9a57600080fd5b6020850194505b83851015614cc257614cb38986614a2d565b83529384019391850191614ca1565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806101408385031215614cf857600080fd5b614d028484614a2d565b91506101208301516006811061437a57600080fd5b600060208284031215614d2957600080fd5b81516001600160401b03811115614d3f57600080fd5b8201601f81018413614d5057600080fd5b8051614d5e613ef082613eaa565b818152856020838501011115614d7357600080fd5b61323d8260208301602086016144f4565b81516001600160401b03811115614d9d57614d9d613d8f565b614db181614dab84546147a3565b846147dd565b602080601f831160018114614de65760008415614dce5750858301515b600019600386901b1c1916600185901b17855561247d565b600085815260208120601f198616915b82811015614e1557888601518255948401946001909101908401614df6565b5085821015614e335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561069957610699614aca565b86815285602082015260a060408201526000614e7660a0830186886148e5565b6060830194909452506001600160a01b0391909116608090910152949350505050565b6000606080830187845260208781860152604060606040870152828784526080935060808701905060808860051b8801018960005b8a811015614fdd57898303607f190184528135368d9003603e19018112614ef457600080fd5b8c01803584528386018782013536839003601e19018112614f1457600080fd5b9091018781019190356001600160401b03811115614f3157600080fd5b60c08082023603841315614f4457600080fd5b868a01899052918190526000918b87015b82841015614fc7578435614f68816146a4565b15158152848b01358b820152898501358a8201528c850135614f8981613cde565b6001600160a01b03908116828f0152858d01358d83015260a09086820135614fb081613cde565b169082015293810193600193909301928101614f55565b978a019796505050928701925050600101614ece565b50909c9b505050505050505050505050565b600082356102de1983360301811261500657600080fd5b9190910192915050565b6000610200828403121561502357600080fd5b61502b613dce565b9050813581526020820135602082015260408201356040820152615051606083016146b2565b6060820152615062608083016146b2565b608082015261507360a083016146b2565b60a082015261508460c083016146b2565b60c082015261509560e083016146b2565b60e08201526101006150a88184016146b2565b908201526101206150ba8382016146b2565b908201526101406150cc8382016146b2565b908201526101606150de8382016146b2565b908201526101806150f08382016146b2565b908201526101a06151028382016146b2565b908201526101c0615114838201613cf3565b81830152506101e080830135818301525092915050565b600082601f83011261513c57600080fd5b8135602061514c613ef083614c0b565b82815260059290921b8401810191818101908684111561516b57600080fd5b8286015b848110156152a45780356001600160401b038082111561518e57600080fd5b908801906040828b03601f19018113156151a757600080fd5b6151af613df1565b87840135815281840135838111156151c657600080fd5b8085019450508b603f8501126151db57600080fd5b8784013592506151ed613ef084614c0b565b83815260c09093028401820192888101908d85111561520b57600080fd5b948301945b8486101561528f5760c0868f03121561522857600080fd5b615230613e13565b863561523b816146a4565b8152868b01358b8201528487013585820152606087013561525b81613cde565b60608201526080878101359082015260a087013561527881613cde565b60a0820152825260c0959095019490890190615210565b828a015250865250505091830191830161516f565b509695505050505050565b600082601f8301126152c057600080fd5b813560206152d0613ef083614c0b565b82815260069290921b840181019181810190868411156152ef57600080fd5b8286015b848110156152a4576040818903121561530c5760008081fd5b615314613df1565b8135815284820135858201528352918301916040016152f3565b600082601f83011261533f57600080fd5b8135602061534f613ef083614c0b565b82815260059290921b8401810191818101908684111561536e57600080fd5b8286015b848110156152a45780356001600160401b03808211156153925760008081fd5b908801906080828b03601f19018113156153ac5760008081fd5b6153b4613e35565b878401356153c181613cde565b81526040848101356153d281613cde565b828a0152606085810135858111156153ea5760008081fd5b6153f88f8c838a01016152af565b848401525092850135928484111561541257600091508182fd5b6154208e8b868901016152af565b90830152508652505050918301918301615372565b60006102e0823603121561544857600080fd5b615450613e57565b8235815260208301356020820152604083013560408201526060830135606082015261547e60808401613cf3565b60808201526154903660a08501615010565b60a08201526102a08301356001600160401b03808211156154b057600080fd5b6154bc3683870161512b565b60c08401526102c08501359150808211156154d657600080fd5b506154e33682860161532e565b60e08301525092915050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b600060608083018684526020868186015260406060604087015282875180855260808801915060808160051b89010194508389016000805b838110156155e0578a8803607f190185528251805189528701518789018790528051878a018190529088019083908b8b01905b808310156155cb576155b58285516154ef565b60c0820191508a840193506001830192506155a2565b5099505050938601939186019160010161556f565b50959c9b505050505050505050505050565b60008151808452602080850194506020840160005b8381101561562e578151805188528301518388015260409096019590820190600101615607565b509495945050505050565b60006060808301868452602086818601526040606060408701528287518085526080945060808801915060808160051b890101848a0160005b83811015614fdd578a8303607f19018552815180516001600160a01b039081168552888201511688850152868101518785018a90526156b38a8601826155f2565b918b0151858303868d01529190506156cb81836155f2565b968901969450505090860190600101615672565b60008235603e1983360301811261500657600080fd5b60006040823603121561570757600080fd5b61570f613df1565b823561571a81613cde565b81526020838101356001600160401b0381111561573657600080fd5b840136601f82011261574757600080fd5b8035615755613ef082614c0b565b81815260059190911b8201830190838101903683111561577457600080fd5b928401925b8284101561579b57833561578c81613cde565b82529284019290840190615779565b938501939093525091949350505050565b60006040820184835260206040602085015281855180845260608601915060208701935060005b818110156157f85784516001600160a01b0316835293830193918301916001016157d3565b5090979650505050505050565b600060018060a01b03808816835286602084015285604084015260a0606084015261583360a0840186614518565b91508084166080840152509695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000808585111561586e57600080fd5b8386111561587b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156158b55780818660140360031b1b83161692505b505092915050565b600082516150068184602087016144f4565b600060208083850312156158e257600080fd5b82516001600160401b038111156158f857600080fd5b8301601f8101851361590957600080fd5b8051615917613ef082614c0b565b81815260c0918202830184019184820191908884111561593657600080fd5b938501935b83851015614cc25780858a0312156159535760008081fd5b61595b613e13565b8551615966816146a4565b815285870151878201526040808701519082015260608087015161598981613cde565b908201526080868101519082015260a0808701516159a681613cde565b908201528352938401939185019161593b565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615a06908401826154ef565b5092915050565b6001600160a01b038781168252602082018790528581166040830152606082018590528316608082015260c060a08201819052600090615a4f90830184614518565b98975050505050505050565b6000610120615a6a83886154ef565b8560c08401528060e0840152615a8281840186614518565b91505060018060a01b03831661010083015295945050505050565b6101008101615aac82866154ef565b60c08201939093526001600160a01b039190911660e09091015291905056fea26469706673582212203490eebb4d92bb15dceb32d7c9f89d3eff8047112f14189d9aefed1f42a411fe64736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000003295c9c7374e583cb2e6ed455eaf9908022159d00000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da50000000000000000000000002fd39295dd948dfbb8aa7e2508ea5fc15096682b000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000000000000000", + "gas": "5480708", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "value": "0", + "txData": "0xa1ed3175000000000000000000000000daf6226aafe296bbccbec815133386cd910ed5820000000000000000000000000000000000000000000000000000000000000001", + "gas": "89338", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x18017cfeD48E1dC0Adc445cEF8A9e6AfFCb330DA", + "value": "0", + "txData": "0xf2fde38b000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad", + "gas": "66946", + "operation": 0, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d5660c060405234801561001057600080fd5b50604051610cf6380380610cf683398101604081905261002f916100ee565b82816001600160a01b03811661005f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006881610086565b506001600160a01b039081166080529190911660a0525061013b9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100eb57600080fd5b50565b60008060006060848603121561010357600080fd5b835161010e816100d6565b602085015190935061011f816100d6565b6040850151909250610130816100d6565b809150509250925092565b60805160a051610b8261017460003960008181609d015261039d015260008181610185015281816107cb01526108740152610b826000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461010f578063c6081d7114610120578063d42ebdb614610133578063f2fde38b1461016d578063f434c9141461018057600080fd5b8063293c4999146100985780632c1ae882146100dc5780633be273fa146100f2578063715018a614610105575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4600081565b6040519081526020016100d3565b6100e4610100366004610905565b6101a7565b61010d610351565b005b6000546001600160a01b03166100bf565b61010d61012e36600461094c565b610365565b6100bf61014136600461098d565b60016020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b61010d61017b3660046109b9565b6105e7565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60008284036101c2576101bb82600a610ad2565b9050610349565b600085815260016020908152604080832087845282528083208684529091529020546001600160a01b031680156102645760405163d3f5c15f60e01b8152600481018490526001600160a01b0382169063d3f5c15f90602401602060405180830381865afa158015610238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025c9190610ade565b915050610349565b50600085815260016020908152604080832086845282528083208784529091529020546001600160a01b0316801561031d5761025c6102a484600a610ad2565b6102af85600a610ad2565b60405163d3f5c15f60e01b8152600481018790526001600160a01b0385169063d3f5c15f90602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610ade565b61062a565b85156103305761025c60008686866101a7565b604051633ae4eae560e11b815260040160405180910390fd5b949350505050565b610359610704565b6103636000610731565b565b8315158061037e57506000546001600160a01b03163314155b15610418576040516331a9108f60e11b815260048101859052610418907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190610af7565b856013610781565b821580610423575081155b15610441576040516376e6504f60e01b815260040160405180910390fd5b60008381527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208584529091529020546001600160a01b03161515806104d0575060008281527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083208684529091529020546001600160a01b031615155b156104ee5760405163d28d564f60e01b815260040160405180910390fd5b600084815260016020908152604080832086845282528083208584529091529020546001600160a01b031615158061054f5750600084815260016020908152604080832085845282528083208684529091529020546001600160a01b031615155b1561056d5760405163d28d564f60e01b815260040160405180910390fd5b6000848152600160209081526040808320868452825280832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915591519182528391859187917f4cf05c413627a637dcbb4b5559323b7e969cb13fbd111a1a4ffab7d09a92d527910160405180910390a450505050565b6105ef610704565b6001600160a01b03811661061e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61062781610731565b50565b60008080600019858709858702925082811083820303915050806000036106645783828161065a5761065a610b14565b04925050506106fd565b83811061069557604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610615565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000546001600160a01b031633146103635760405163118cdaa760e01b8152336004820152602401610615565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b336001600160a01b0384168114801590610838575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190610b2a565b155b80156108e1575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190610b2a565b155b156108ff5760405163075fd2b160e01b815260040160405180910390fd5b50505050565b6000806000806080858703121561091b57600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038116811461062757600080fd5b6000806000806080858703121561096257600080fd5b843593506020850135925060408501359150606085013561098281610937565b939692955090935050565b6000806000606084860312156109a257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156109cb57600080fd5b81356106fd81610937565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610a27578160001904821115610a0d57610a0d6109d6565b80851615610a1a57918102915b93841c93908002906109f1565b509250929050565b600082610a3e57506001610acc565b81610a4b57506000610acc565b8160018114610a615760028114610a6b57610a87565b6001915050610acc565b60ff841115610a7c57610a7c6109d6565b50506001821b610acc565b5060208310610133831016604e8410600b8410161715610aaa575081810a610acc565b610ab483836109ec565b8060001904821115610ac857610ac86109d6565b0290505b92915050565b60006106fd8383610a2f565b600060208284031215610af057600080fd5b5051919050565b600060208284031215610b0957600080fd5b81516106fd81610937565b634e487b7160e01b600052601260045260246000fd5b600060208284031215610b3c57600080fd5b815180151581146106fd57600080fdfea2646970667358221220d4643802a0b4b7ef774dfcba08ca09099ff97a16b8485f11243e357a029b233164736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d7000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000", + "gas": "785095", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000038b860e06040523480156200001157600080fd5b506040516200385838038062003858833981016040819052620000349162000070565b60016000556001600160a01b0392831660805290821660a0521660c052620000c4565b6001600160a01b03811681146200006d57600080fd5b50565b6000806000606084860312156200008657600080fd5b8351620000938162000057565b6020850151909350620000a68162000057565b6040850151909250620000b98162000057565b809150509250925092565b60805160a05160c0516136e6620001726000396000818161015701528181610d990152818161179c015281816121e301526124ca01526000818161031601528181610376015281816109bd01528181610ac4015281816110bc01528181611334015281816113fc015281816118dd0152611d7201526000818161023f015281816104eb01528181610bc6015281816111cf015281816119dd01528181611ead015261224501526136e66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638e86e7a411610097578063b7cc53b311610066578063b7cc53b3146102bc578063c0920f38146102fe578063d4a1b4b114610311578063d60d1a091461033857600080fd5b80638e86e7a4146102615780639e0a5d59146102745780639e6840c114610287578063ab5f3a01146102a957600080fd5b8063467f4cb9116100d3578063467f4cb9146101b257806351fc1735146101e3578063568ecef1146101f857806388bc2ef31461023a57600080fd5b80630d346b811461010557806319781e23146101315780631eabcd341461015257806330795ef814610191575b600080fd5b610118610113366004612748565b61034b565b60405161012894939291906128db565b60405180910390f35b61014461013f36600461298e565b61099a565b604051908152602001610128565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b6101a461019f3660046129be565b610a9c565b6040516101289291906129fa565b6101446101c0366004612a17565b600160209081526000938452604080852082529284528284209052825290205481565b6101f66101f1366004612a59565b61102a565b005b610144610206366004612a91565b6003602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b61014461026f366004612ae3565b611099565b610144610282366004612b77565b6112f9565b61029a610295366004612ba9565b6113d2565b60405161012893929190612c66565b6101446102b7366004612d10565b61189e565b6101446102ca366004612a91565b6002602090815260009586526040808720825294865284862081529285528385208352908452828420909152825290205481565b6101a461030c3660046129be565b6118b5565b6101797f000000000000000000000000000000000000000000000000000000000000000081565b610144610346366004612d3c565b611d05565b61035361259e565b6000806060610360611dfe565b6040516321d1336160e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612db9565b610100810151909450600090604c1c60019081161461049557610490338c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156104565761044760608302860136819003810190612e5e565b8152602001906001019061042a565b5050505050888d602001602081019061046f9190612eae565b60ff168e60400160208101906104859190612ec9565b63ffffffff16611e28565b6104c7565b6104c78b6104a960408c0160208d01612eae565b60ff166104bc60608d0160408e01612ec9565b63ffffffff16611e8a565b604051632eec7b5560e11b8152600481018d90529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190612ee4565b6001600160a01b0316634da781a98d6040518263ffffffff1660e01b815260040161058391815260200190565b602060405180830381865afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190612f01565b9050808b11156105e657604051625c579160e91b815260040160405180910390fd5b610100860151604e1c60019081161480156106195750600061060d876101000151604f1c90565b6001600160a01b031614155b1561079b576000604051806101400160405280336001600160a01b031681526020018f6001600160a01b031681526020018e8152602001886020015181526020018d815260200183815260200160405180608001604052808e60000160208101906106849190612f1a565b6001600160a01b031681526020018681526020018e60200160208101906106ab9190612eae565b60ff1681526020018e60400160208101906106c69190612ec9565b63ffffffff16905281526020016106ea8961010001516001604c9190911c81161490565b1515815261010089015160209091019060141c61ffff168152602001899052905061071a876101000151604f1c90565b6001600160a01b031663aaf320d7826040518263ffffffff1660e01b81526004016107459190612f37565b600060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078a919081019061306c565b919e50919650945091506107ab9050565b61010086015160141c61ffff1693505b81156107c0576107bd828c8387611fdf565b94505b825185901561081957835160005b818110156108165760008682815181106107ea576107ea61318c565b60200260200101516020015190508060001461080d5761080a81856131b8565b93505b506001016107ce565b50505b60016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060008c60000160208101906108649190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156108a557604051630a9128e560e21b815260040160405180910390fd5b801561097f578060016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906108f79190612f1a565b6001600160a01b03166001600160a01b03168152602001908152602001600020540360016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008f815260200190815260200160002060008d60000160208101906109649190612f1a565b6001600160a01b031681526020810191909152604001600020555b50505061098c6001600055565b975097509750979350505050565b60006109a4611dfe565b6040516321d1336160e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612db9565b61010081015190915060471c600190811614610a60576040516383455bbb60e01b815260040160405180910390fd5b505033600090815260016020818152604080842086855282528084206001600160a01b0386168552909152822080549083905591555b92915050565b610aa461259e565b6000610aae611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190612db9565b3360009081526003602090815260408083208a845282528220929450909186918390610b66908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208784015182528352818120888252909252902054610ba291906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612ee4565b6001600160a01b03166329ed16cd898660200151338b6000016020810190610cba9190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190612f01565b905080821180610d4d575080155b15610d6b57604051635b76558960e11b815260040160405180910390fd5b610d7b6060880160408901612ec9565b63ffffffff168514610e6057610e5b86610d976012600a6132af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8c8a8d6040016020810190610ddb9190612ec9565b6040516001600160e01b031960e086901b1681526004810193909352602483019190915263ffffffff166044820152601260648201526084015b602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e569190612f01565b612051565b610e62565b855b60408051600180825281830190925291945060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610e7d579050509050610ebb36899003890189612e5e565b81600081518110610ece57610ece61318c565b6020026020010181905250610f09338a83888c6020016020810190610ef39190612eae565b60ff168d60400160208101906104859190612ec9565b841115610f2957604051630a9128e560e21b815260040160405180910390fd5b3360009081526003602090815260408083208c84528252822085929091610f52908c018c612f1a565b6001600160a01b031681526020808201929092526040908101600090812089840151825283528181208a8252835281812093909355338352600182528083208c84528252822086929091610fa8908c018c612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610fd391906132bb565b3360009081526001602090815260408083208d8452825282209190610ffa908c018c612f1a565b6001600160a01b0316815260208101919091526040016000205550611021915061204a9050565b94509492505050565b33600090815260016020908152604080832086845282528083206001600160a01b03861684529091529020546110619082906131b8565b3360009081526001602090815260408083209683529581528582206001600160a01b0395909516825293909352929091209190915550565b6040516321d1336160e11b81526004810188905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906343a266c29060240161012060405180830381865afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190612db9565b9050600083611196576111918b8b8b8b808060200260200160405190810160405280939291908181526020016000905b828210156111845761117560608302860136819003810190612e5e565b81526020019060010190611158565b5050505050858b8b611e28565b6111a1565b6111a18a8888611e8a565b9050806000036111b6576000925050506112ed565b604051632eec7b5560e11b8152600481018b90526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112429190612ee4565b6001600160a01b0316634da781a98c6040518263ffffffff1660e01b815260040161126f91815260200190565b602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b09190612f01565b9050808611156112c657600093505050506112ed565b6112e78287836112e287610100015161ffff60149190911c1690565b611fdf565b93505050505b98975050505050505050565b60008160000361130b575060006113ca565b8284111561131b575060006113ca565b6040516321d1336160e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a89190612db9565b90506113c68386866112e285610100015161ffff60149190911c1690565b9150505b949350505050565b6113da61259e565b600060606113e6611dfe565b6040516321d1336160e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190612db9565b805190935060000361149557604051631bcf786760e11b815260040160405180910390fd5b61010083015160441c6001908116036114c1576040516358c8f01960e11b815260040160405180910390fd5b610100830151600090604d1c60019081161480156114f7575060006114eb856101000151604f1c90565b6001600160a01b031614155b156116325760408051610120810182523381526001600160a01b038c166020820152600091810161152d368d90038d018d6132ce565b815260208082018c905287015160408201526001600160a01b038a16606082015260a080880151608083015261010088015191019060041c61ffff16815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506115b7856101000151604f1c90565b6001600160a01b0316634c4ffc71826040518263ffffffff1660e01b81526004016115e2919061333c565b600060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116279190810190613411565b935091506116399050565b5060a08301515b815160208a01359080156116b55760005b818110156116b35760008582815181106116665761166661318c565b6020026020010151602001519050806000146116aa578381111561169d5760405163cd40dac160e01b815260040160405180910390fd5b6116a781856132bb565b93505b5060010161164a565b505b5089602001356000036116ce5750600092506118889050565b801561176a573360009081526001602090815260408083208c845282528220839290916116fd908e018e612f1a565b6001600160a01b03166001600160a01b031681526020019081526020016000205461172891906131b8565b3360009081526001602090815260408083208d845282528220919061174f908e018e612f1a565b6001600160a01b031681526020810191909152604001600020555b8160000361177e5750600092506118889050565b61010085015160009060241c63ffffffff168b6060013514611862577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633be273fa8b8d606001356117e78a610100015163ffffffff60249190911c1690565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301528e01356064820152608401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190612f01565b611871565b61187160408c0135600a6132af565b90506118828b602001358483612051565b94505050505b6118926001600055565b96509650969350505050565b60006118ab848484611e8a565b90505b9392505050565b6118bd61259e565b60006118c7611dfe565b6040516321d1336160e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906343a266c29060240161012060405180830381865afa15801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190612db9565b3360009081526002602090815260408083208a84528252822092945090918691839061197f908a018a612f1a565b6001600160a01b03168152602080820192909252604090810160009081208751825283528181208882529092529020546119b991906131b8565b604051632eec7b5560e11b8152600481018990529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa99190612ee4565b6001600160a01b0316638ca53ccd898660200151338b6000016020810190611ad19190612f1a565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0390811660448401521660648201526084810188905260a401602060405180830381865afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b569190612f01565b905080821180611b64575080155b15611b8257604051630f2114d360e11b815260040160405180910390fd5b611b926060880160408901612ec9565b63ffffffff168514611bb357611bae86610d976012600a6132af565b611bb5565b855b3360009081526001602090815260408083208c845282528220929550611bdd908a018a612f1a565b6001600160a01b03166001600160a01b0316815260200190815260200160002054831115611c1e57604051630a9128e560e21b815260040160405180910390fd5b3360009081526002602090815260408083208b84528252822084929091611c47908b018b612f1a565b6001600160a01b0316815260208082019290925260409081016000908120885182528352818120898252835281812093909355338352600182528083208b84528252822085929091611c9b908b018b612f1a565b6001600160a01b031681526020808201929092526040908101600090812054338252600184528282208d83528452918120939091039291611cde908b018b612f1a565b6001600160a01b031681526020810191909152604001600020555061102190506001600055565b6000611df187878787808060200260200160405190810160405280939291908181526020016000905b82821015611d5a57611d4b60608302860136819003810190612e5e565b81526020019060010190611d2e565b50506040516321d1336160e11b8152600481018e90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693506343a266c29250602401905061012060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612db9565b8787611e28565b90505b9695505050505050565b600260005403611e2157604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b8351600090815b81811015611e7e576000611e608a8a8a8581518110611e5057611e5061318c565b60200260200101518a8a8a612129565b90508015611e7557611e7281856131b8565b93505b50600101611e2f565b50509695505050505050565b60405163d175415360e01b81526004810184905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d175415390602401600060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f1c919081019061351e565b805190915060005b81811015611fd557828181518110611f3e57611f3e61318c565b602090810291909101015160405163cc68012760e01b81526004810189905260248101889052604481018790526001600160a01b039091169063cc68012790606401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190612f01565b611fcb90856131b8565b9350600101611f24565b5050509392505050565b6000828403611fef5750836113ca565b81600003611fff575060006113ca565b600061200c868686612051565b9050612710830361201e5790506113ca565b6113c68161203887612032876127106132bb565b88612051565b61204290866131b8565b612710612051565b6001600055565b600080806000198587098587029250828110838203039150508060000361208b57838281612081576120816135b7565b04925050506118ae565b8381106120c057604051630c740aef60e31b815260048101879052602481018690526044810185905260640160405180910390fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038087166000908152600160209081526040808320898452825280832088519094168352928152919020549085015160ff16831461217f5761217a81866020015160ff1685612541565b612181565b805b9050801580612199575081856040015163ffffffff16145b61221f5761221a816121ad6012600a6132af565b6040888101519051631df139fd60e11b8152600481018b905263ffffffff909116602482015260448101869052601260648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633be273fa90608401610e15565b612221565b805b604051632eec7b5560e11b8152600481018890529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612ee4565b6001600160a01b031663ffa082446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123119190612ee4565b60208601518751604051634c8cafef60e11b8152600481018b905260248101929092526001600160a01b038b81166044840152908116606483015291909116906399195fde90608401600060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261239f91908101906135cd565b90506123be604051806040016040528060008152602001600081525090565b815160005b81811015612533578381815181106123dd576123dd61318c565b6020908102919091018101516001600160a01b03808e1660009081526002845260408082208f835285528082208e5190931682529184528181208c518252845281812083850151825290935290912054815191945061243b916132bb565b8352602089015160ff1687146124665761246183600001518a6020015160ff1689612541565b612469565b82515b808452158061247b5750858360200151145b6124fe5782516124f9906124916012600a6132af565b6020860151604051631df139fd60e11b8152600481018f90526024810191909152604481018a9052601260648201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633be273fa90608401610e15565b612501565b82515b80845285111561251e57825161251790866132bb565b945061252b565b6000945050505050611df4565b6001016123c3565b505050509695505050505050565b60008282036125515750826118ae565b8282111561257f5761256383836132bb565b61256e90600a6132af565b6125789085613677565b90506118ae565b61258982846132bb565b61259490600a6132af565b612578908561368e565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6001600160a01b038116811461260857600080fd5b50565b60006060828403121561261d57600080fd5b50919050565b60008083601f84011261263557600080fd5b5081356001600160401b0381111561264c57600080fd5b60208301915083602060608302850101111561266757600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156126a7576126a761266e565b60405290565b604051606081016001600160401b03811182821017156126a7576126a761266e565b604080519081016001600160401b03811182821017156126a7576126a761266e565b604051601f8201601f191681016001600160401b03811182821017156127195761271961266e565b604052919050565b60006001600160401b0382111561273a5761273a61266e565b50601f01601f191660200190565b6000806000806000806000610100888a03121561276457600080fd5b873561276f816125f3565b9650602088013595506040880135945061278c8960608a0161260b565b935060c08801356001600160401b03808211156127a857600080fd5b6127b48b838c01612623565b909550935060e08a01359150808211156127cd57600080fd5b508801601f81018a136127df57600080fd5b80356127f26127ed82612721565b6126f1565b8181528b602083850101111561280757600080fd5b8160208401602083013760006020838301015280935050505092959891949750929550565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e0808201516001600160a01b03169083015261010090810151910152565b60005b838110156128a657818101518382015260200161288e565b50506000910152565b600081518084526128c781602086016020860161288b565b601f01601f19169290920160200192915050565b60006101808083016128ed848961282c565b86610120850152856101408501528161016085015280915084518082526101a091508185019250818160051b8601019150602080870160005b8381101561297e5787850361019f19018652815180516001600160a01b03168652838101518487015260409081015160609187018290529061296a818801836128af565b978501979650505090820190600101612926565b50929a9950505050505050505050565b600080604083850312156129a157600080fd5b8235915060208301356129b3816125f3565b809150509250929050565b60008060008060c085870312156129d457600080fd5b843593506129e5866020870161260b565b939693955050505060808201359160a0013590565b6101408101612a09828561282c565b826101208301529392505050565b600080600060608486031215612a2c57600080fd5b8335612a37816125f3565b9250602084013591506040840135612a4e816125f3565b809150509250925092565b600080600060608486031215612a6e57600080fd5b833592506020840135612a80816125f3565b929592945050506040919091013590565b600080600080600060a08688031215612aa957600080fd5b8535612ab4816125f3565b9450602086013593506040860135612acb816125f3565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215612aff57600080fd5b8835612b0a816125f3565b97506020890135965060408901356001600160401b03811115612b2c57600080fd5b612b388b828c01612623565b909750955050606089013593506080890135925060a0890135915060c08901358015158114612b6657600080fd5b809150509295985092959890939650565b60008060008060808587031215612b8d57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080868803610100811215612bc457600080fd5b8735612bcf816125f3565b96506080601f1982011215612be357600080fd5b5060208701945060a0870135935060c0870135612bff816125f3565b925060e08701356001600160401b0380821115612c1b57600080fd5b818901915089601f830112612c2f57600080fd5b813581811115612c3e57600080fd5b8a6020828501011115612c5057600080fd5b6020830194508093505050509295509295509295565b6000610160808301612c78848861282c565b610120840186905261014084019190915283519081905261018080840191600581901b850190910190602080870160005b83811015612d015787850361017f19018652815180516001600160a01b031686528381015184870152604090810151606091870182905290612ced818801836128af565b978501979650505090820190600101612ca9565b50929998505050505050505050565b600080600060608486031215612d2557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060a08789031215612d5557600080fd5b8635612d60816125f3565b95506020870135945060408701356001600160401b03811115612d8257600080fd5b612d8e89828a01612623565b979a9699509760608101359660809091013595509350505050565b8051612db4816125f3565b919050565b60006101208284031215612dcc57600080fd5b612dd4612684565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152612e2060e08401612da9565b60e0820152610100928301519281019290925250919050565b803560ff81168114612db457600080fd5b803563ffffffff81168114612db457600080fd5b600060608284031215612e7057600080fd5b612e786126ad565b8235612e83816125f3565b8152612e9160208401612e39565b6020820152612ea260408401612e4a565b60408201529392505050565b600060208284031215612ec057600080fd5b6118ae82612e39565b600060208284031215612edb57600080fd5b6118ae82612e4a565b600060208284031215612ef657600080fd5b81516118ae816125f3565b600060208284031215612f1357600080fd5b5051919050565b600060208284031215612f2c57600080fd5b81356118ae816125f3565b60208152612f516020820183516001600160a01b03169052565b60006020830151612f6d60408401826001600160a01b03169052565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612fcf60e084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b5060e083015115156101608301526101008301516101808301526101208301516101a0808401526113ca6101c08401826128af565b60006001600160401b0382111561301d5761301d61266e565b5060051b60200190565b600082601f83011261303857600080fd5b81516130466127ed82612721565b81815284602083860101111561305b57600080fd5b6113ca82602083016020870161288b565b6000806000806080858703121561308257600080fd5b84519350602085015192506040850151915060608501516001600160401b03808211156130ae57600080fd5b818701915087601f8301126130c257600080fd5b81516130d06127ed82613004565b8082825260208201915060208360051b86010192508a8311156130f257600080fd5b602085015b8381101561317c5780518581111561310e57600080fd5b86016060818e03601f1901121561312457600080fd5b61312c6126ad565b602082015161313a816125f3565b81526040820151602082015260608201518781111561315857600080fd5b6131678f602083860101613027565b604083015250845250602092830192016130f7565b50979a9699509497505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9657610a966131a2565b600181815b808511156132065781600019048211156131ec576131ec6131a2565b808516156131f957918102915b93841c93908002906131d0565b509250929050565b60008261321d57506001610a96565b8161322a57506000610a96565b8160018114613240576002811461324a57613266565b6001915050610a96565b60ff84111561325b5761325b6131a2565b50506001821b610a96565b5060208310610133831016604e8410600b8410161715613289575081810a610a96565b61329383836131cb565b80600019048211156132a7576132a76131a2565b029392505050565b60006118ae838361320e565b81810381811115610a9657610a966131a2565b6000608082840312156132e057600080fd5b604051608081018181106001600160401b03821117156133025761330261266e565b6040528235613310816125f3565b808252506020830135602082015260408301356040820152606083013560608201528091505092915050565b602081526133566020820183516001600160a01b03169052565b6000602083015161337260408401826001600160a01b03169052565b5060408301516133ac606084018280516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b50606083015160e08301526080830151610100818185015260a085015191506133e16101208501836001600160a01b03169052565b60c085015161014085015260e08501516101608501528401516101808085015290506113ca6101a08401826128af565b6000806040838503121561342457600080fd5b825191506020808401516001600160401b038082111561344357600080fd5b818601915086601f83011261345757600080fd5b81516134656127ed82613004565b81815260059190911b8301840190848101908983111561348457600080fd5b8585015b8381101561350d578051858111156134a05760008081fd5b86016060818d03601f19018113156134b85760008081fd5b6134c06126ad565b898301516134cd816125f3565b815260408301518a8201529082015190878211156134eb5760008081fd5b6134f98e8b84860101613027565b604082015285525050918601918601613488565b508096505050505050509250929050565b6000602080838503121561353157600080fd5b82516001600160401b0381111561354757600080fd5b8301601f8101851361355857600080fd5b80516135666127ed82613004565b81815260059190911b8201830190838101908783111561358557600080fd5b928401925b828410156135ac57835161359d816125f3565b8252928401929084019061358a565b979650505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208083850312156135e057600080fd5b82516001600160401b038111156135f657600080fd5b8301601f8101851361360757600080fd5b80516136156127ed82613004565b81815260069190911b8201830190838101908783111561363457600080fd5b928401925b828410156135ac57604084890312156136525760008081fd5b61365a6126cf565b845181528585015186820152825260409093019290840190613639565b8082028115828204841417610a9657610a966131a2565b6000826136ab57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220186d8089a535754dc0185d594ca9aceb5fcafb866c3d618c29e90f4fc79efa0464736f6c6343000817003300000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000001eb7799d3a230a0440f0d6c477256df8d425adbb0000000000000000000000000631183bd45c31f8645f9dcf8705951f730362e90000000000000000", + "gas": "3368052", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000470608060405234801561001057600080fd5b5060405161045038038061045083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610353806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a714610067578063715018a61461008f5780637258002c146100995780638da5cb5b146100ac578063ae74a1b5146100c7578063f2fde38b146100ea575b600080fd5b61007a610075366004610279565b6100fd565b60405190151581526020015b60405180910390f35b610097610134565b005b6100976100a73660046102c6565b610148565b6000546040516001600160a01b039091168152602001610086565b61007a6100d5366004610302565b60016020526000908152604090205460ff1681565b6100976100f8366004610302565b6101b9565b60006001600160e01b0319821663dc2ca19960e01b148061012e57506001600160e01b031982166301ffc9a760e01b145b92915050565b61013c6101fc565b6101466000610229565b565b6101506101fc565b6001600160a01b0382166000818152600160205260409020805460ff1916831515908117909155907fa2653e25a502c023a5830d0de847ef6f458387865b1f4f575d7594f9f2c0d71e336040516001600160a01b03909116815260200160405180910390a35050565b6101c16101fc565b6001600160a01b0381166101f057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101f981610229565b50565b6000546001600160a01b031633146101465760405163118cdaa760e01b81523360048201526024016101e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028b57600080fd5b81356001600160e01b0319811681146102a357600080fd5b9392505050565b80356001600160a01b03811681146102c157600080fd5b919050565b600080604083850312156102d957600080fd5b6102e2836102aa565b9150602083013580151581146102f757600080fd5b809150509250929050565b60006020828403121561031457600080fd5b6102a3826102aa56fea26469706673582212208a2354b0c33bc389c30912e168b6230eaef57e6b7244c0375c9146ee349b47f764736f6c63430008170033000000000000000000000000823b92d6a4b2aed4b15675c7917c9f922ea8adad00000000000000000000000000000000", + "gas": "316627", + "operation": 1, + "requireSuccess": true + }, + { + "to": "0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4", + "value": "0", + "txData": "0x4c8c9ea100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000632c6101806040523480156200001257600080fd5b506040516200622c3803806200622c83398101604081905262000035916200008b565b6001600160a01b03978816608052871660a05294861660c05292851660e0529084166101005283166101205282166101405216610160526200014c565b6001600160a01b03811681146200008857600080fd5b50565b600080600080600080600080610100898b031215620000a957600080fd5b8851620000b68162000072565b60208a0151909850620000c98162000072565b60408a0151909750620000dc8162000072565b60608a0151909650620000ef8162000072565b60808a0151909550620001028162000072565b60a08a0151909450620001158162000072565b60c08a0151909350620001288162000072565b60e08a01519092506200013b8162000072565b809150509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051615f9362000299600039600081816104430152818161209a015261248601526000818161040f015281816107c901528181610b0801528181610e120152818161282501528181612cab015261401001526000818161031f015281816116250152818161183f01528181611b0a01528181611d290152818161279601528181612ae901528181612e7b015281816139d1015261463b0152600081816101b201526142910152600081816104aa01528181610a280152818161117301528181611de60152818161220301528181612b970152613ec40152600081816101fe015281816110dd015281816114a501528181611702015281816128c60152612f1901526000818161038b015281816104740152613afb0152600081816105c60152818161262801526126d10152615f936000f3fe6080604052600436106101665760003560e01c80636afdd850116100d1578063bb7214fe1161008a578063cfaf583911610064578063cfaf583914610574578063e28b541114610594578063f434c914146105b4578063fef43257146105e857600080fd5b8063bb7214fe1461051f578063c57981b51461053f578063cc6801271461055457600080fd5b80636afdd850146104315780637da0a8771461046557806388bc2ef31461049857806398ea47fc146104cc5780639e6eec05146104ec578063b62d17cf146104ff57600080fd5b8063507f146511610123578063507f14651461030d578063515a929314610341578063572b6c051461036e5780635f912e56146103bb57806362ef3036146103dd578063659a2047146103fd57600080fd5b806301ffc9a71461016b5780631f47ce69146101a0578063293c4999146101ec57806333b30610146102205780633a01714f1461024d57806343a89aaf146102df575b600080fd5b34801561017757600080fd5b5061018b610186366004614940565b6105fb565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610197565b3480156101f857600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561022c57600080fd5b5061024061023b36600461497f565b6106ef565b60405161019791906149af565b34801561025957600080fd5b506102d261026836600461497f565b6040805160608082018352600080835260208084018290529284018190529485528482528285206001600160a01b03948516865282529382902082519485018352549283168452600160a01b830460ff1690840152600160a81b90910463ffffffff169082015290565b6040516101979190614a3c565b3480156102eb57600080fd5b506102ff6102fa366004614a4a565b61078f565b604051908152602001610197565b34801561031957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561034d57600080fd5b5061036161035c366004614ab2565b610eb2565b6040516101979190614b11565b34801561037a57600080fd5b5061018b610389366004614b24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156103c757600080fd5b506103db6103d6366004614b41565b610f4c565b005b3480156103e957600080fd5b506103db6103f836600461497f565b6110b3565b34801561040957600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561047157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101d4565b3480156104a457600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d857600080fd5b506103db6104e7366004614b92565b6110c3565b6103db6104fa366004614c5f565b6113fd565b34801561050b57600080fd5b506102ff61051a366004614d06565b611480565b34801561052b57600080fd5b506102ff61053a366004614d80565b61158b565b34801561054b57600080fd5b506102ff601981565b34801561056057600080fd5b506102ff61056f366004614ddc565b611600565b34801561058057600080fd5b506102ff61058f366004614e08565b6116ac565b3480156105a057600080fd5b506102ff6105af366004614e50565b6116dd565b3480156105c057600080fd5b506101d47f000000000000000000000000000000000000000000000000000000000000000081565b6102ff6105f6366004614e92565b6119b9565b60006001600160e01b0319821663775c5eb360e11b148061062c57506001600160e01b03198216633d0d324560e21b145b8061064757506001600160e01b03198216632f720bd160e21b145b8061066257506001600160e01b03198216635db90a7f60e11b145b8061067d57506001600160e01b03198216633cc127fb60e11b145b8061069857506001600160e01b031982166306afdd8560e41b145b806106b357506001600160e01b0319821663775c5eb360e11b145b806106ce57506001600160e01b03198216633c6fe5f560e21b145b806106e957506001600160e01b031982166301ffc9a760e01b145b92915050565b60008281526002602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156107835760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b03168486015260029091015491830191909152908352909201910161072e565b50505050905092915050565b600033301461079d57600080fd5b508160006107b160c0880160a08901614b24565b6001600160a01b0316146109f2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b56107fe60c0890160a08a01614b24565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108669190614f45565b61088257610875836019611a76565b61087f9082614f78565b90505b6040805160c0810182526001600160a01b0386168082526020808301859052600089815280825284812083825290915283812054600160a01b900460ff169383019390935260608201889052608082015260a081016108e6368a90038a018a615060565b9052905061090a6108fd60c0890160a08a01614b24565b6312903a8560e01b611a98565b156109445760405162461bcd60e51b81526020600482015260056024820152643430305f3160d81b60448201526064015b60405180910390fd5b61095e61095760c0890160a08a01614b24565b8684611ab4565b60006001600160a01b03861661eeee1461097957600061097b565b825b905061098d60c0890160a08a01614b24565b6001600160a01b03166312903a8582846040518363ffffffff1660e01b81526004016109b9919061511c565b6000604051808303818588803b1580156109d257600080fd5b505af11580156109e6573d6000803e3d6000fd5b50505050505050610ea9565b604086013515610db95760408051630862026560e41b81529087013560048201526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190615170565b90506001600160a01b038116610ad55760405162461bcd60e51b81526020600482015260056024820152641a181a2f9960d91b604482015260640161093b565b6001600160a01b0381163014801590610b75575060405163ae74a1b560e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190614f45565b155b15610b9257610b85846019611a76565b610b8f9083614f78565b91505b610b9d818684611ab4565b600086604051602001610bb291815260200190565b60408051601f198184030181529190529050610bd1602089018961518d565b15610c9e57306001600160a01b03831603610c0d57610c088860400135878560006040518060200160405280600081525086611ae5565b610db2565b60006001600160a01b03871661eeee14610c28576000610c2a565b835b9050826001600160a01b0316639e6eec05828b604001358a886000886040518763ffffffff1660e01b8152600401610c669594939291906151fa565b6000604051808303818588803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505050505050610db2565b600080610cb160808b0160608c01614b24565b6001600160a01b031603610cc55784610cd5565b610cd560808a0160608b01614b24565b9050306001600160a01b03841603610d0f57610d098960400135888630856040518060200160405280600081525088611bf1565b50610db0565b60006001600160a01b03881661eeee14610d2a576000610d2c565b845b9050836001600160a01b031663fef43257828c604001358b898760008a6040518863ffffffff1660e01b8152600401610d6a9695949392919061523d565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190615289565b50505b505b5050610ea9565b600080610dcc6080890160608a01614b24565b6001600160a01b031603610de05782610df0565b610df06080880160608901614b24565b60405163ae74a1b560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063ae74a1b590602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614f45565b610e9b57610e8e846019611a76565b610e989083614f78565b91505b610ea730828785611f68565b505b95945050505050565b606060016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f4157600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101610ee7565b505050509050919050565b333014610f5857600080fd5b6001600160a01b038116610f965760405162461bcd60e51b81526020600482015260056024820152643430345f3160d81b604482015260640161093b565b6001600160a01b0381163014610fb157610fb1818585611ab4565b600085604051602001610fc691815260200190565b60408051601f198184030181529190529050306001600160a01b0383160361100d576110076001868630876040518060200160405280600081525087611bf1565b506110ab565b60006001600160a01b03861661eeee1461102857600061102a565b845b9050826001600160a01b031663fef432578260018989896000896040518863ffffffff1660e01b81526004016110659695949392919061523d565b60206040518083038185885af1158015611083573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a89190615289565b50505b505050505050565b6110bf828260006120f8565b5050565b6040516331a9108f60e11b8152600481018490526111fe907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190615170565b604051632eec7b5560e11b81526004810186905285906014906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635dd8f6aa90602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190615170565b6001600160a01b03166111ef612334565b6001600160a01b031614612343565b806000805b828110156110ab5784848281811061121d5761121d6152a2565b90506020020160208101906112329190614b24565b6000878152602081815260408083206001600160a01b038086168552925290912080549294509116156112785760405163b83f909160e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b038416908117825561eeee1461130257826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd91906152ce565b611305565b60125b815464ffffffffff60a01b1916600160a01b60ff928316810263ffffffff60a81b1990811692909217600160a81b63ffffffff888116820292909217865560008c815260016020818152604083208054928301815583529091208754910180546001600160a01b039283166001600160a01b031982168117835589546001600160a81b03199092161790869004909716909402959095178084558654941693819004909116029190911790558316877f9570de6fc0456f642bd0a001b24cd31676388c24596df64a17190c24310690a1836113de612334565b6040516113ec929190615314565b60405180910390a350600101611203565b6110a8888861140f8b8b8b8888612353565b8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250611ae592505050565b6040516331a9108f60e11b815260048101899052600090611518906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615170565b8a60116125ca565b61155c898989898888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275c92505050565b90508481101561157f5760405163a1a08d1760e01b815260040160405180910390fd5b98975050505050505050565b6000611599898960036125ca565b6115dd898989898888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129ec92505050565b90508481101561157f5760405163f896960b60e01b815260040160405180910390fd5b600083815260016020526040808220905163d60d1a0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d60d1a09916116619130918991908990899060040161533a565b602060405180830381865afa15801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190615289565b90505b9392505050565b60006116ba86868686612e41565b905081811015610ea95760405163a1a08d1760e01b815260040160405180910390fd5b6040516331a9108f60e11b815260048101849052600090611775906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d9190615170565b8560056125ca565b604051633a01714f60e01b8152600481018590526001600160a01b038481166024830152831690633a01714f90604401606060405180830381865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e691906153ab565b6020015160ff1660000361180d5760405163581010ed60e01b815260040160405180910390fd5b611819848460016120f8565b6040516319781e2360e01b8152600481018590526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000016906319781e23906044016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190615289565b90508015611953576118bf828483611ab4565b60006001600160a01b03841661eeee146118da5760006118dc565b815b6040805160208101825260008082529151639e6eec0560e01b81529293506001600160a01b03861692639e6eec0592859261191f928b928b928a926004016151fa565b6000604051808303818588803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b5050505050505b816001600160a01b0316836001600160a01b0316857ff0aa72bb9c2a07cf43281bfe8c525ba320fdc71e18b54c9f93ab22ce074af7f684611992612334565b604080519283526001600160a01b0390911660208301520160405180910390a49392505050565b6000611a468a8a6119cd8d8d8d8989612353565b6119d5612334565b8b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250611bf192505050565b905085811015611a69576040516370dc561160e11b815260040160405180910390fd5b9998505050505050505050565b6000611a8e836103e8611a898186615406565b613080565b6116a59084614f78565b6000611aa383613154565b80156116a557506116a58383613187565b61eeed196001600160a01b03831601611acc57505050565b611ae06001600160a01b0383168483613211565b505050565b600083611af3576000611afe565b611afe87878761329b565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166351fc17358888611b3b858a615406565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b50505050867f9ecaf7fc3dfffd6867c175d6e684b1f1e3aef019398ba8db2c1ffab4a09db25386838686611bcf612334565b604051611be0959493929190615419565b60405180910390a250505050505050565b6000611bfb61489e565b60606000611c33604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60008060008e815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900463ffffffff1663ffffffff1663ffffffff1681525050905060405180608001604052808d6001600160a01b031681526020018c8152602001826020015160ff168152602001826040015163ffffffff168152509150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e6840c18a838f8c8b6040518663ffffffff1660e01b8152600401611d7b959493929190615491565b6000604051808303816000875af1158015611d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dc291908101906155e4565b91955090935091508115611eed57604051632eec7b5560e11b8152600481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615170565b6040516363fdc96f60e11b8152600481018e9052602481018490526001600160a01b038a8116604483015260a06064830152600060a483015260016084830152919091169063c7fb92de9060c4016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190615289565b94505b825115611f0457611f048c84838c888d8b8d6135ab565b8b846000015185602001517f133161f1c9161488f777ab9a26aae91d47c0d9a3fafb398960f138db02c737978c8c8f8b8e8e611f3e612334565b604051611f519796959493929190615708565b60405180910390a450505050979650505050505050565b61eeed196001600160a01b03831601611f8a57611f8583826137d1565b6120f2565b306001600160a01b03851603611fae57611f856001600160a01b0383168483613868565b604051636eb1769f60e11b81526001600160a01b03858116600483015230602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120219190615289565b1061203b57611f856001600160a01b0383168585846138c7565b6001600160a01b0381111561206357604051633062f38960e11b815260040160405180910390fd5b604051631b63c28b60e11b81526001600160a01b0385811660048301528481166024830152828116604483015283811660648301527f000000000000000000000000000000000000000000000000000000000000000016906336c7851690608401600060405180830381600087803b1580156120de57600080fd5b505af11580156110a8573d6000803e3d6000fd5b50505050565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083529192909190849084015b8282101561218a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101612135565b50505060008681526002602090815260408083206001600160a01b038916845290915281209293506121bd9291506148f3565b8051604080516060810182526000808252602082018190528183018190529151630862026560e41b8152600160048201526001600160a01b0387811660248301529192917f00000000000000000000000000000000000000000000000000000000000000001690638620265090604401602060405180830381865afa15801561224a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226e9190615170565b905060005b838110156110a85784818151811061228d5761228d6152a2565b60200260200101519250851580156122a85750428360400151115b156123155760008881526002602081815260408084206001600160a01b038c811686529083528185208054600180820183559187529584902089516003909702019586559288015192850180546001600160a01b031916939091169290921790915585015191015561232c565b61232c888885600001518660200151866001613900565b600101612273565b600061233e613aeb565b905090565b806120f2576120f28484846125ca565b6000858152602081815260408083206001600160a01b03888116855292528220541661239257604051630faa917b60e11b815260040160405180910390fd5b61eeed196001600160a01b038616016123ac575034610ea9565b34156123cb57604051635e7e9adf60e11b815260040160405180910390fd5b306123d4612334565b6001600160a01b0316036123e9575082610ea9565b60003060601b90506000806124348387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6092505050565b91509150811561258857600081806020019051810190612454919061577e565b90508781602001516001600160a01b03161015612484576040516317e415a160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632b67b5706124bb612334565b604051806060016040528060405180608001604052808f6001600160a01b0316815260200187602001516001600160a01b03168152602001876040015165ffffffffffff168152602001876060015165ffffffffffff168152508152602001306001600160a01b03168152602001856000015181525084608001516040518463ffffffff1660e01b815260040161255493929190615829565b600060405180830381600087803b15801561256e57600080fd5b505af1158015612582573d6000803e3d6000fd5b50505050505b600061259389613d06565b90506125a86125a0612334565b308b8b611f68565b806125b28a613d06565b6125bc9190614f78565b9a9950505050505050505050565b60006125d4612334565b9050836001600160a01b0316816001600160a01b031614158015612695575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260448201859052606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614f45565b155b801561273e575060405163c161c93f60e01b81526001600160a01b038281166004830152858116602483015260006044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063c161c93f90608401602060405180830381865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614f45565b155b156120f25760405163075fd2b160e01b815260040160405180910390fd5b600061276661489e565b6000888152602081815260408083206001600160a01b038b81168552925291829020915163060f2bdf60e31b81527f0000000000000000000000000000000000000000000000000000000000000000909116916330795ef8916127d1918c918b908b9060040161589d565b610140604051808303816000875af11580156127f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281591906158c3565b9250905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ae74a1b5612852612334565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba9190614f45565b61296c576129678989857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8e6040518263ffffffff1660e01b815260040161291291815260200190565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615170565b610100870151604b1c600190811614613d8e565b61296f565b60005b6129799084614f78565b9050801561298d5761298d30868a84611f68565b88826000015183602001517f8657a0c05a68a912c23c1bd00124afaa8c669063b046bd9bfd22b21d573c5e6d888b88878b6129c6612334565b6040516129d8969594939291906158f2565b60405180910390a450509695505050505050565b60006129f661489e565b6000878152602081815260408083206001600160a01b038a8116855290835281842082516060808201855291549283168152600160a01b830460ff1681860152600160a81b90920463ffffffff16828401528b855260018452828520805484518187028101870190955280855291959492938593909290849084015b82821015612acc57600084815260209081902060408051606081018252918501546001600160a01b0381168352600160a01b810460ff1683850152600160a81b900463ffffffff1690820152825260019092019101612a72565b5050604051630d346b8160e01b8152929350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630d346b819150612b29908f908f908e90889088908f9060040161593c565b6000604051808303816000875af1158015612b48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b70919081019061598e565b91985091965094509250508715612c8457604051632eec7b5560e11b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635dd8f6aa90602401602060405180830381865afa158015612be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0a9190615170565b60405163516a997360e11b81526001600160a01b038d81166004830152602482018d9052604482018b90526080606483015260006084830152919091169063a2d532e69060a401600060405180830381600087803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b505050505b60008515612d605760405163ae74a1b560e01b81526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ae74a1b590602401602060405180830381865afa158015612cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d169190614f45565b158015612d2557506127108314155b15612d4e57612d348682615406565b9050612d41866019611a76565b612d4b9087614f78565b95505b8515612d6057612d6030898c89611f68565b835115612dbf57612db28b60405180608001604052808d6001600160a01b03168152602001898152602001856020015160ff168152602001856040015163ffffffff168152508e8c8b8a898f8c613f42565b612dbc9082615406565b90505b80600003612dce576000612ddc565b612ddc8b8b838b6000613d8e565b508a856000015186602001517f9565fc8bdd4f45a73582d1163dbe522a4fb0c4dbb882b5e66269f70101a2509a8f8c8e898d8f612e17612334565b604051612e2a9796959493929190615aba565b60405180910390a450505050509695505050505050565b6000612e4b61489e565b6000868152602081815260408083206001600160a01b038981168552925291829020915163181241e760e31b81527f00000000000000000000000000000000000000000000000000000000000000009091169163c0920f3891612eb6918a918990899060040161589d565b610140604051808303816000875af1158015612ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efa91906158c3565b6040516331a9108f60e11b8152600481018990529093509091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8c9190615170565b9050600080612fa18989866020015188614257565b90925090506000612fcd8a8a612fb78686615406565b6101008901518890604b1c600190811614613d8e565b905060008315612ffa57612fe2846019611a76565b612fec9085614f78565b9050612ffa30868c84611f68565b8a866000015187602001517fda42c5c18ef97738d10c32811895add569670a6fcbe9627ea198d446f3be6dea888d8c8888613033612334565b604080516001600160a01b03978816815260208101969096528501939093526060840191909152608083015290911660a082015260c00160405180910390a4505050505050949350505050565b60008080600019858709858702925082811083820303915050806000036130ba578382816130b0576130b0615b0d565b04925050506116a5565b8381106130eb57604051630c740aef60e31b815260048101879052602481018690526044810185905260640161093b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000613167826301ffc9a760e01b613187565b80156106e95750613180826001600160e01b0319613187565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131fa575060208210155b80156132065750600081115b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190615289565b90506120f284846132968585615406565b614423565b60008381526002602090815260408083206001600160a01b0386168452825280832080548251818502810185019093528083528493849084015b8282101561332a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b0316848601526002909101549183019190915290835290920191016132d5565b50505060008781526002602090815260408083206001600160a01b038a168452909152812092935061335d9291506148f3565b8051604080516060810182526000808252602082018190529181018290528592915b8281101561354157848181518110613399576133996152a2565b60200260200101519150836000036134135760008981526002602081815260408084206001600160a01b038d811686529083528185208054600180820183559187529584902088516003909702019586559287015192850180546001600160a01b0319169390911692909217909155840151910155613539565b600061342483600001516019611a76565b905060008184600001516134389190614f78565b905080861061344f57968101969485900394613536565b61345a8660196144b3565b9150600260008c815260200190815260200160002060008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280888403815260200186602001516001600160a01b03168152602001866040015181525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015550508188019750600095505b50505b60010161337f565b5085876001600160a01b0316897fedc5125503c021a73fd7d8ed0c2456b296be2c88f39fbed068bd091cef7ca43d8887613579612334565b6040805193845260208401929092526001600160a01b03169082015260600160405180910390a4505050509392505050565b6000604051806101400160405280876001600160a01b031681526020018a8152602001866020015181526020018881526020018881526020018660a001518152602001848152602001856001600160a01b03168152602001604051806020016040528060008152508152602001838152509050600088519050613651604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b828110156137c3578a818151811061366e5761366e6152a2565b6020026020010151915060405180608001604052808b600001516001600160a01b03168152602001836020015181526020018b6040015181526020018b60600151815250846080018190525081604001518461010001819052506136df82600001518b600001518460200151611ab4565b89516000906001600160a01b031661eeee146136fc576000613702565b82602001515b835160405163f3c5788160e01b81529192506001600160a01b03169063f3c57881908390613734908990600401615bcf565b6000604051808303818588803b15801561374d57600080fd5b505af1158015613761573d6000803e3d6000fd5b505050505082600001516001600160a01b03167f092bf36eb737817b64e5cea9e9b69305c423a987b5c3066516b046cad5c0bc368685602001516137a3612334565b6040516137b293929190615be2565b60405180910390a250600101613654565b505050505050505050505050565b804710156137f45760405163cd78605960e01b815230600482015260240161093b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5050905080611ae057604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ae091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c2565b6040516001600160a01b0384811660248301528381166044830152606482018390526120f29186918216906323b872dd90608401613895565b604051632fc8972b60e11b8152600481018790526001600160a01b038087166024830152604482018690528085166064830152831660848201523090635f912e569060a401600060405180830381600087803b15801561395f57600080fd5b505af1925050508015613970575060015b613a82573d80801561399e576040519150601f19603f3d011682016040523d82523d6000602084013e6139a3565b606091505b506040516351fc173560e01b8152600481018890526001600160a01b038781166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b158015613a1557600080fd5b505af1158015613a29573d6000803e3d6000fd5b505050506001866001600160a01b0316887f4b73f3c5cfb174c9d0494138d07ff8ee3aa400df46327d9893ed5ac122dd558a8885613a65612334565b604051613a7493929190615c15565b60405180910390a4506110ab565b83856001600160a01b0316877fb514e730b3f8ad3aa94b6857bcc5ff4a46954bdcf8c4b0346705b1d0ac7a43258487613ab9612334565b6040805193151584526001600160a01b03928316602085015291169082015260600160405180910390a4505050505050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613b285750808210155b15613b5857600036613b3a8385614f78565b613b45928290615c46565b613b4e91615c70565b60601c9250505090565b339250505090565b600060606025835111613b855750506040805160208101909152600080825290613cff565b600083613b9460046020615406565b81518110613ba457613ba46152a2565b0160209081015160f81c91505b600085613bbf600484615406565b81518110613bcf57613bcf6152a2565b01602001516001600160f81b03191614801590613bf55750613bf2602083615ca5565b81105b15613cfc57600085613c08600484615406565b81518110613c1857613c186152a2565b016020908101518784019091015160f89190911c91506001600160e01b031980891690821603613cf2576000613c4f602086615ca5565b613c5a600986615406565b101580613c8f575087613c6e600986615406565b81518110613c7e57613c7e6152a2565b01602001516001600160f81b031916155b613cc857602088613ca1600987615406565b81518110613cb157613cb16152a2565b0160200151613cc3919060f81c615ca5565b613ccb565b87515b90506001613ce489613cde602087615ca5565b84614525565b965096505050505050613cff565b5050600501613bb1565b50505b9250929050565b60006001600160a01b03821661eeee14613d87576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190615289565b6106e9565b4792915050565b6000613d9b846019611a76565b90508115613e9b5760008681526002602090815260408083206001600160a01b03808a168552908352928190208151606081018352888152938716928401929092529091908101613def6224ea0042615406565b9052815460018082018455600093845260209384902083516003909302019182559282015192810180546001600160a01b0319166001600160a01b0394851617905560409091015160029091015584908616877fef9cd8fc3b61b64b44042ada0a8a3ede1649bc1b112673da228120f13bf1381e601987613e6e612334565b604080519384526001600160a01b03928316602085015291169082015260600160405180910390a4610ea9565b604051630862026560e41b8152600160048201526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638620265090604401602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190615170565b9050610ea787878487856000613900565b6000806040518061014001604052808a6001600160a01b031681526020018c8152602001876020015181526020018981526020018b81526020018b8152602001868152602001856001600160a01b03168152602001604051806020016040528060008152508152602001888152509050600083519050613fe5604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b60005b8281101561424657858181518110614002576140026152a2565b6020026020010151915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ae74a1b584600001516040518263ffffffff1660e01b815260040161406d91906001600160a01b0391909116815260200190565b602060405180830381865afa15801561408a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ae9190614f45565b6140c6576140c183602001516019611a76565b6140c9565b60005b905080156140f85760208301516140e09087615406565b955080836020018181516140f49190614f78565b9052505b60405180608001604052808f600001516001600160a01b03168152602001846020015181526020018f6040015181526020018f606001518152508560a00181905250826040015185610100018190525061415f83600001518f600001518560200151611ab4565b8d516000906001600160a01b031661eeee1461417c576000614182565b83602001515b84516040516319bb132d60e21b81529192506001600160a01b0316906366ec4cb49083906141b4908a90600401615d4b565b6000604051808303818588803b1580156141cd57600080fd5b505af11580156141e1573d6000803e3d6000fd5b505050505083600001516001600160a01b03167f5d2ae7ac07b3a26000acaa692b550c84cbb87300557e0359791cfec9efe1615a87866020015185614224612334565b6040516142349493929190615d5e565b60405180910390a25050600101613fe8565b505050509998505050505050505050565b6040516369e11cc560e01b815260048101859052602481018390526001600160a01b0384811660448301526000918291633b9aca009183917f000000000000000000000000000000000000000000000000000000000000000016906369e11cc590606401600060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526143009190810190615d96565b80516040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091529192509060005b8281101561441257838181518110614355576143556152a2565b60200260200101519150600061437089846020015188613080565b90506000614380848e8e8561456b565b905080158015906143915750818114155b156143a3576143a08289615406565b97505b81156143af57818a0399505b8360200151870396508b6001600160a01b03168b8e7f39305f11865947ab83bc6548c8c77e5890ed5bc4a6ea54e6fe7b22f4f406f4b88786866143f0612334565b6040516144009493929190615e8c565b60405180910390a4505060010161433b565b508695505050505094509492505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261447484826146f1565b6120f2576040516001600160a01b038481166024830152600060448301526144a991869182169063095ea7b390606401613895565b6120f284826144c2565b60006116a583836103e8613080565b60006144d76001600160a01b03841683614794565b905080516000141580156144fc5750808060200190518101906144fa9190614f45565b155b15611ae057604051635274afe760e01b81526001600160a01b038416600482015260240161093b565b60608282036040519150602081830101604052808252508260208501016020820160005b84811015614561578281015182820152602001614549565b5050509392505050565b6000306343a89aaf8686868661457f612334565b6040518663ffffffff1660e01b815260040161459f959493929190615ec0565b6020604051808303816000875af19250505080156145da575060408051601f3d908101601f191682019092526145d791810190615289565b60015b6146e6573d808015614608576040519150601f19603f3d011682016040523d82523d6000602084013e61460d565b606091505b506040516351fc173560e01b8152600481018690526001600160a01b038581166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906351fc173590606401600060405180830381600087803b15801561467f57600080fd5b505af1158015614693573d6000803e3d6000fd5b50505050847f37b65da09d1a43465d8f823dcc858aa187792b35585b56afe707d57d7108d2288785846146c4612334565b6040516146d49493929190615eff565b60405180910390a260009150506146e9565b90505b949350505050565b6000806000846001600160a01b03168460405161470e9190615f41565b6000604051808303816000865af19150503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b509150915081801561477a57508051158061477a57508080602001905181019061477a9190614f45565b8015610ea95750505050506001600160a01b03163b151590565b60606116a58383600084600080856001600160a01b031684866040516147ba9190615f41565b60006040518083038185875af1925050503d80600081146147f7576040519150601f19603f3d011682016040523d82523d6000602084013e6147fc565b606091505b509150915061480c868383614816565b9695505050505050565b60608261482b5761482682614872565b6116a5565b815115801561484257506001600160a01b0384163b155b1561486b57604051639996b31560e01b81526001600160a01b038516600482015260240161093b565b50806116a5565b8051156148825780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b508054600082556003029060005260206000209081019061489b91905b8082111561493c5760008082556001820180546001600160a01b03191690556002820155600301614910565b5090565b60006020828403121561495257600080fd5b81356001600160e01b0319811681146116a557600080fd5b6001600160a01b038116811461489b57600080fd5b6000806040838503121561499257600080fd5b8235915060208301356149a48161496a565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015614a0457815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016149cc565b5091979650505050505050565b80516001600160a01b0316825260208082015160ff169083015260409081015163ffffffff16910152565b606081016106e98284614a11565b6000806000806000858703610140811215614a6457600080fd5b60c0811215614a7257600080fd5b5085945060c0860135935060e0860135614a8b8161496a565b92506101008601359150610120860135614aa48161496a565b809150509295509295909350565b600060208284031215614ac457600080fd5b5035919050565b60008151808452602080850194506020840160005b83811015614b0657614af3878351614a11565b6060969096019590820190600101614ae0565b509495945050505050565b6020815260006116a56020830184614acb565b600060208284031215614b3657600080fd5b81356116a58161496a565b600080600080600060a08688031215614b5957600080fd5b853594506020860135614b6b8161496a565b9350604086013592506060860135614b828161496a565b91506080860135614aa48161496a565b600080600060408486031215614ba757600080fd5b8335925060208401356001600160401b0380821115614bc557600080fd5b818601915086601f830112614bd957600080fd5b813581811115614be857600080fd5b8760208260051b8501011115614bfd57600080fd5b6020830194508093505050509250925092565b801515811461489b57600080fd5b60008083601f840112614c3057600080fd5b5081356001600160401b03811115614c4757600080fd5b602083019150836020828501011115613cff57600080fd5b60008060008060008060008060c0898b031215614c7b57600080fd5b883597506020890135614c8d8161496a565b9650604089013595506060890135614ca481614c10565b945060808901356001600160401b0380821115614cc057600080fd5b614ccc8c838d01614c1e565b909650945060a08b0135915080821115614ce557600080fd5b50614cf28b828c01614c1e565b999c989b5096995094979396929594505050565b60008060008060008060008060e0898b031215614d2257600080fd5b883597506020890135614d348161496a565b965060408901359550606089013594506080890135935060a0890135614d598161496a565b925060c08901356001600160401b03811115614d7457600080fd5b614cf28b828c01614c1e565b60008060008060008060008060e0898b031215614d9c57600080fd5b8835614da78161496a565b9750602089013596506040890135614dbe8161496a565b9550606089013594506080890135935060a0890135614d598161496a565b600080600060608486031215614df157600080fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215614e2057600080fd5b853594506020860135614e328161496a565b94979496505050506040830135926060810135926080909101359150565b600080600060608486031215614e6557600080fd5b833592506020840135614e778161496a565b91506040840135614e878161496a565b809150509250925092565b600080600080600080600080600060e08a8c031215614eb057600080fd5b8935985060208a0135614ec28161496a565b975060408a0135965060608a0135614ed98161496a565b955060808a0135945060a08a01356001600160401b0380821115614efc57600080fd5b614f088d838e01614c1e565b909650945060c08c0135915080821115614f2157600080fd5b50614f2e8c828d01614c1e565b915080935050809150509295985092959850929598565b600060208284031215614f5757600080fd5b81516116a581614c10565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e9576106e9614f62565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614fc357614fc3614f8b565b60405290565b604051606081016001600160401b0381118282101715614fc357614fc3614f8b565b60405161012081016001600160401b0381118282101715614fc357614fc3614f8b565b60405160a081016001600160401b0381118282101715614fc357614fc3614f8b565b604051601f8201601f191681016001600160401b038111828210171561505857615058614f8b565b604052919050565b600060c0828403121561507257600080fd5b61507a614fa1565b823561508581614c10565b80825250602083013560208201526040830135604082015260608301356150ab8161496a565b60608201526080838101359082015260a08301356150c88161496a565b60a08201529392505050565b80511515825260208082015190830152604080820151908301526060808201516001600160a01b03908116918401919091526080808301519084015260a09182015116910152565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a082810151610160830191615169908401826150d4565b5092915050565b60006020828403121561518257600080fd5b81516116a58161496a565b60006020828403121561519f57600080fd5b81356116a581614c10565b60005b838110156151c55781810151838201526020016151ad565b50506000910152565b600081518084526151e68160208601602086016151aa565b601f01601f19169290920160200192915050565b85815260018060a01b0385166020820152836040820152821515606082015260c06080820152600060c082015260e060a0820152600061320660e08301846151ce565b868152600060018060a01b03808816602084015286604084015280861660608401525083608083015260e060a0830152600060e08301526101008060c0840152611a69818401856151ce565b60006020828403121561529b57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805160ff811681146152c957600080fd5b919050565b6000602082840312156152e057600080fd5b6116a5826152b8565b546001600160a01b038116825260a081901c60ff16602083015260a81c63ffffffff16604090910152565b6080810161532282856152e9565b6001600160a01b039290921660609190910152919050565b6001600160a01b0386168152602080820186905260a060408301819052855490830181905260008681529182209060c0840190835b818110156153945761538183856152e9565b600193840193606093909301920161536f565b505060608401959095525050608001529392505050565b6000606082840312156153bd57600080fd5b6153c5614fc9565b82516153d08161496a565b81526153de602084016152b8565b6020820152604083015163ffffffff811681146153fa57600080fd5b60408201529392505050565b808201808211156106e9576106e9614f62565b85815284602082015260a06040820152600061543860a08301866151ce565b828103606084015261544a81866151ce565b91505060018060a01b03831660808301529695505050505050565b80516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6001600160a01b038681168252600090610100906154b26020850189615465565b8660a085015280861660c0850152508060e084015261157f818401856151ce565b80516152c98161496a565b600061012082840312156154f157600080fd5b6154f9614feb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015261554760e083016154d3565b60e082015261010080830151818301525092915050565b60006001600160401b0382111561557757615577614f8b565b5060051b60200190565b600082601f83011261559257600080fd5b81516001600160401b038111156155ab576155ab614f8b565b6155be601f8201601f1916602001615030565b8181528460208386010111156155d357600080fd5b6146e98260208301602087016151aa565b600080600061016084860312156155fa57600080fd5b61560485856154de565b925061012084015191506101408401516001600160401b038082111561562957600080fd5b818601915086601f83011261563d57600080fd5b8151602061565261564d8361555e565b615030565b82815260059290921b8401810191818101908a84111561567157600080fd5b8286015b848110156156f75780518681111561568c57600080fd5b87016060818e03601f190112156156a257600080fd5b6156aa614fc9565b858201516156b78161496a565b81526040820151868201526060820151888111156156d55760008081fd5b6156e38f8883860101615581565b604083015250845250918301918301615675565b508096505050505050509250925092565b600060018060a01b03808a168352808916602084015287604084015286606084015260e0608084015261573e60e08401876151ce565b83810360a085015261575081876151ce565b92505080841660c08401525098975050505050505050565b805165ffffffffffff811681146152c957600080fd5b60006020828403121561579057600080fd5b81516001600160401b03808211156157a757600080fd5b9083019060a082860312156157bb57600080fd5b6157c361500e565b8251815260208301516157d58161496a565b60208201526157e660408401615768565b60408201526157f760608401615768565b606082015260808301518281111561580e57600080fd5b61581a87828601615581565b60808301525095945050505050565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e084015261480c818401856151ce565b84815260c081016158b160208301866152e9565b608082019390935260a0015292915050565b60008061014083850312156158d757600080fd5b6158e184846154de565b915061012083015190509250929050565b600060018060a01b03808916835287602084015286604084015285606084015260c0608084015261592660c08401866151ce565b915080841660a084015250979650505050505050565b6001600160a01b0387168152602081018690526040810185905260006101006159686060840187614a11565b8060c084015261597a81840186614acb565b905082810360e0840152611a6981856151ce565b60008060008061018085870312156159a557600080fd5b6159af86866154de565b9350610120850151925061014085015191506101608501516001600160401b03808211156159dc57600080fd5b818701915087601f8301126159f057600080fd5b81516159fe61564d8261555e565b8082825260208201915060208360051b86010192508a831115615a2057600080fd5b602085015b83811015615aaa57805185811115615a3c57600080fd5b86016060818e03601f19011215615a5257600080fd5b615a5a614fc9565b6020820151615a688161496a565b815260408201516020820152606082015187811115615a8657600080fd5b615a958f602083860101615581565b60408301525084525060209283019201615a25565b50979a9699509497505050505050565b600060018060a01b03808a168352808916602084015287604084015286606084015285608084015260e060a0840152615af660e08401866151ce565b915080841660c08401525098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b80516001600160a01b03168252600061020060208301516020850152604083015160408501526060830151615b5b6060860182615465565b506080830151615b6e60e0860182615465565b5060a083015161016085015260c083015161018085015260e08301516001600160a01b03166101a08501526101008301516101c08501829052615bb3828601826151ce565b9150506101208301518482036101e0860152610ea982826151ce565b6020815260006116a56020830184615b23565b606081526000615bf56060830186615b23565b6020830194909452506001600160a01b0391909116604090910152919050565b838152606060208201526000615c2e60608301856151ce565b905060018060a01b0383166040830152949350505050565b60008085851115615c5657600080fd5b83861115615c6357600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015615c9d5780818660140360031b1b83161692505b505092915050565b80820281158282048414176106e9576106e9614f62565b80516001600160a01b0316825260006102006020830151602085015260408301516040850152606083015160608501526080830151615cfe6080860182615465565b5060a0830151610100615d1381870183615465565b60c085015161018087015260e08501516001600160a01b03166101a08701528401516101c086018390529050615bb3828601826151ce565b6020815260006116a56020830184615cbc565b608081526000615d716080830187615cbc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60006020808385031215615da957600080fd5b82516001600160401b03811115615dbf57600080fd5b8301601f81018513615dd057600080fd5b8051615dde61564d8261555e565b81815260c09182028301840191848201919088841115615dfd57600080fd5b938501935b83851015615e805780858a031215615e1a5760008081fd5b615e22614fa1565b8551615e2d81614c10565b8152858701518782015260408087015190820152606080870151615e508161496a565b908201526080868101519082015260a080870151615e6d8161496a565b9082015283529384019391850191615e02565b50979650505050505050565b6101208101615e9b82876150d4565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b6101408101615ecf82886150d4565b60c08201959095526001600160a01b0393841660e082015261010081019290925290911661012090910152919050565b6000610120615f0e83886150d4565b8560c08401528060e0840152615f26818401866151ce565b91505060018060a01b03831661010083015295945050505050565b60008251615f538184602087016151aa565b919091019291505056fea264697066735822122014d2ba3a9870372b44172570d3bfc9cb856beba241a20cfa46389ec26775622964736f6c63430008170033000000000000000000000000ba24624ae5dc821866e9e71ed050412ef01e2fe60000000000000000000000004d9207abeca883161a1eaee9dabedc0001c198d700000000000000000000000018017cfed48e1dc0adc445cef8a9e6affcb330da0000000000000000000000007cb4a75d21c45d1a0a0333bfa626f54636c84da5000000000000000000000000a0d811360b0d49be8d33309d6eae03d072e30312000000000000000000000000ee80091e7c8e7c9764ad8ccc94f978b15d7cc841000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a870000000000000000000000000000000000000000", + "gas": "5758572", + "operation": 1, + "requireSuccess": true + } + ], + "sphinxConfig": { + "projectName": "nana-core", + "orgId": "cltepuu9u0003j58rjtbd0hvu", + "owners": [ + "0x26416423d530b1931A2a7a6b7D435Fac65eED27d" + ], + "mainnets": [ + "ethereum", + "optimism", + "polygon" + ], + "testnets": [ + "ethereum_sepolia", + "optimism_sepolia", + "polygon_mumbai" + ], + "threshold": "1", + "saltNonce": "0" + }, + "executionMode": 2, + "initialState": { + "isSafeDeployed": false, + "isModuleDeployed": false, + "isExecuting": false + }, + "unlabeledContracts": [], + "arbitraryChain": false, + "libraries": [], + "gitCommit": "b03f34d98eacd4484804213a3ba52efcdbe9107e", + "safeInitData": "0xb63e800d00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a238cbeb142c10ef7ad8442c6d1f9e89e07e77610000000000000000000000000000000000000000000000000000000000000140000000000000000000000000f48f2b2d2a534e402487b3ee7c18c33aec0fe5e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000026416423d530b1931a2a7a6b7d435fac65eed27d00000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2008f3301c9eada5642b5bb12fd047d3ebb2932e619000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000248236d0b80000000000000000000000000000000000000000000000000000000000000000018f3301c9eada5642b5bb12fd047d3ebb2932e6190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002411ea37fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index f938b444..59c22979 100644 --- a/foundry.toml +++ b/foundry.toml @@ -9,6 +9,17 @@ block_number = 14126430 block_timestamp = 1643802347 runs = 4096 libs = ["node_modules", "lib"] +build_info = true +extra_output = ['storageLayout'] +fs_permissions = [{ access = "read-write", path = "./"}] + +[rpc_endpoints] +ethereum ="${RPC_ETHEREUM_MAINNET}" +optimism = "${RPC_OPTIMISM_MAINNET}" +polygon = "${RPC_POLYGON_MUMBAI}" +ethereum_sepolia ="${RPC_ETHEREUM_SEPOLIA}" +optimism_sepolia = "${RPC_OPTIMISM_SEPOLIA}" +polygon_mumbai = "${RPC_POLYGON_MUMBAI}" [profile.fork] # run via FOUNDRY_PROFILE=fork foundry test fs_permissions = [{ access = "read", path = "./deployments/mainnet" }] # Get the deployment addresses for forking @@ -17,4 +28,4 @@ match_contract = "_Fork" [fmt] number_underscore = "thousands" multiline_func_header = "all" -wrap_comments = true +wrap_comments = true \ No newline at end of file diff --git a/lib/sphinx b/lib/sphinx new file mode 160000 index 00000000..f9e327e3 --- /dev/null +++ b/lib/sphinx @@ -0,0 +1 @@ +Subproject commit f9e327e3ce34626df7e2764a23a08a708207f78c diff --git a/package-lock.json b/package-lock.json index a4752b2d..19ff6882 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,124 @@ { "name": "@bananapus/core", - "version": "0.0.3", + "version": "0.0.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bananapus/core", - "version": "0.0.3", + "version": "0.0.6", "license": "MIT", "dependencies": { "@bananapus/permission-ids": "^0.0.2", "@chainlink/contracts": "^0.8.0", "@openzeppelin/contracts": "^5.0.1", "@prb/math": "^4.0.2", + "@sphinx-labs/plugins": "^0.30.8", "@uniswap/permit2": "github:Uniswap/permit2" } }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, + "node_modules/@amplitude/identify": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@amplitude/identify/-/identify-1.10.2.tgz", + "integrity": "sha512-ywxeabS8ukMdJWNwx3rG/EBngXFg/4NsPhlyAxbBUcI7HzBXEJUKepiZfkz8K6Y7f0mpc23Qz1aBf48ZJDZmkQ==", + "dependencies": { + "@amplitude/types": "^1.10.2", + "@amplitude/utils": "^1.10.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@amplitude/node": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@amplitude/node/-/node-1.10.2.tgz", + "integrity": "sha512-E3xp8DOpkF5ThjrRlAmSocnrEYsTPpd3Zg4WdBLms0ackQSgQpw6z84+YMcoPerZHJJ/LEqdo4Cg4Z5Za3D+3Q==", + "dependencies": { + "@amplitude/identify": "^1.10.2", + "@amplitude/types": "^1.10.2", + "@amplitude/utils": "^1.10.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@amplitude/types": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@amplitude/types/-/types-1.10.2.tgz", + "integrity": "sha512-I8qenRI7uU6wKNb9LiZrAosSHVoNHziXouKY81CrqxH9xhVTEIJFXeuCV0hbtBr0Al/8ejnGjQRx+S2SvU/pPg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@amplitude/utils": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@amplitude/utils/-/utils-1.10.2.tgz", + "integrity": "sha512-tVsHXu61jITEtRjB7NugQ5cVDd4QDzne8T3ifmZye7TiJeUfVRvqe44gDtf55A+7VqhDhyEIIXTA1iVcDGqlEw==", + "dependencies": { + "@amplitude/types": "^1.10.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dependencies": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/types": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.535.0.tgz", + "integrity": "sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, "node_modules/@bananapus/permission-ids": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/@bananapus/permission-ids/-/permission-ids-0.0.2.tgz", @@ -37,6 +140,41 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz", "integrity": "sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g==" }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@eth-optimism/common-ts": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eth-optimism/common-ts/-/common-ts-0.7.1.tgz", + "integrity": "sha512-SNaOhoj9lYutcmGpJQJJfZiZii54eoiSB1kM8XVmbIwyhgaTkmuB8IhHOiDbzGB3QXUtbGZjDJmi6LruKkN/CA==", + "dependencies": { + "@eth-optimism/core-utils": "0.12.0", + "@sentry/node": "^6.3.1", + "bcfg": "^0.1.7", + "body-parser": "^1.20.0", + "commander": "^9.0.0", + "dotenv": "^16.0.0", + "envalid": "^7.2.2", + "ethers": "^5.7.0", + "express": "^4.17.1", + "express-prom-bundle": "^6.4.1", + "lodash": "^4.17.21", + "morgan": "^1.10.0", + "pino": "^6.11.3", + "pino-multi-stream": "^5.3.0", + "pino-sentry": "^0.7.0", + "prom-client": "^13.1.0", + "qs": "^6.10.5" + } + }, "node_modules/@eth-optimism/contracts": { "version": "0.5.40", "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.40.tgz", @@ -73,6 +211,77 @@ "chai": "^4.3.4" } }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, "node_modules/@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", @@ -327,7 +536,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/basex": "^5.7.0", @@ -357,7 +565,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -440,7 +647,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/sha2": "^5.7.0" @@ -596,7 +802,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -666,7 +871,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/constants": "^5.7.0", @@ -687,7 +891,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -742,7 +945,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", @@ -751,244 +953,7510 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@openzeppelin/contracts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.1.tgz", - "integrity": "sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==" - }, - "node_modules/@openzeppelin/contracts-upgradeable-4.7.3": { - "name": "@openzeppelin/contracts-upgradeable", - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", - "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" - }, - "node_modules/@openzeppelin/contracts-v0.7": { - "name": "@openzeppelin/contracts", - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz", - "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" - }, - "node_modules/@prb/math": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@prb/math/-/math-4.0.2.tgz", - "integrity": "sha512-kJgqvXR6iyU7+N959RzggSFhBdnRuSDnc/bs8u6MzdWw7aYIUaAr+uMVdpP6Dheypjerd7sfJgFOs19FRFhscg==" - }, - "node_modules/@uniswap/permit2": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/Uniswap/permit2.git#cc56ad0f3439c502c246fc5cfcc3db92bb8b7219", - "license": "MIT" - }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "peer": true - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "engines": { - "node": "*" + "node": ">=14" } }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/bufio": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.1.tgz", - "integrity": "sha512-9oR3zNdupcg/Ge2sSHQF3GX+kmvL/fTPvD0nd5AGLq8SjUYnTz+SlFjK/GXidndbZtIj+pVKXiWeR9w6e9wKCA==", - "engines": { - "node": ">=14.0.0" + "node_modules/@gnosis.pm/safe-contracts": { + "version": "1.3.0", + "resolved": "git+ssh://git@github.com/safe-global/safe-contracts.git#767ef36bba88bdbc0c9fe3708a4290cabef4c376", + "integrity": "sha512-lsw70FOn4/xPiB07UisZVBgd/DUgA190nqv+qGGUJ6Iu9lQMW688NzqI3wpZxm6KZqIcC62QgMOpx9tCSQ0FaA==", + "license": "GPL-3.0", + "peerDependencies": { + "ethers": "^5.1.4" } }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "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.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", "dependencies": { - "type-detect": "^4.0.0" + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" }, "engines": { - "node": ">=6" + "node": ">=12.0.0" } }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "@types/node": "*" } }, - "node_modules/elliptic/node_modules/bn.js": { + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "node_modules/@metamask/eth-sig-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ { "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "url": "https://paulmillr.com/funding/" } - ], - "peer": true, + ] + }, + "node_modules/@nomicfoundation/ethereumjs-block": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.4.tgz", + "integrity": "sha512-AcyacJ9eX/uPEvqsPiB+WO1ymE+kyH48qGGiGV+YTojdtas8itUTW5dehDSOXEEItWGbbzEJ4PRqnQZlWaPvDw==", "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-trie": "6.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-blockchain": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.4.tgz", + "integrity": "sha512-jYsd/kwzbmpnxx86tXsYV8wZ5xGvFL+7/P0c6OlzpClHsbFzeF41KrYA9scON8Rg6bZu3ZTv6JOAgj3t7USUfg==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.4", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-ethash": "3.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-trie": "6.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "lru-cache": "^10.0.0" + }, "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-ethash": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.4.tgz", + "integrity": "sha512-xvIrwIMl9sSaiYKRem68+O7vYdj7Q2XWv5P7JXiIkn83918QzWHvqbswTRsH7+r6X1UEvdsURRnZbvZszEjAaQ==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "bigint-crypto-utils": "^3.2.2", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-evm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.4.tgz", + "integrity": "sha512-lTyZZi1KpeMHzaO6cSVisR2tjiTTedjo7PcmhI/+GNFo9BmyY6QYzGeSti0sFttmjbEMioHgXxl5yrLNRg6+1w==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-statemanager": "2.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@types/debug": "^4.1.9", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "rustbn-wasm": "^0.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-statemanager": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.4.tgz", + "integrity": "sha512-HPDjeFrxw6llEi+BzqXkZ+KkvFnTOPczuHBtk21hRlDiuKuZz32dPzlhpRsDBGV1b5JTmRDUVqCS1lp3Gghw4Q==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-trie": "6.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "js-sdsl": "^4.1.4", + "lru-cache": "^10.0.0" + }, + "peerDependencies": { + "@nomicfoundation/ethereumjs-verkle": "0.0.2" + }, + "peerDependenciesMeta": { + "@nomicfoundation/ethereumjs-verkle": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-trie": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.4.tgz", + "integrity": "sha512-3nSwQiFMvr2VFe/aZUyinuohYvtytUqZCUCvIWcPJ/BwJH6oQdZRB42aNFBJ/8nAh2s3OcroWpBLskzW01mFKA==", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@types/readable-stream": "^2.3.13", + "ethereum-cryptography": "0.1.3", + "lru-cache": "^10.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-verkle": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-verkle/-/ethereumjs-verkle-0.0.2.tgz", + "integrity": "sha512-bjnfZElpYGK/XuuVRmLS3yDvr+cDs85D9oonZ0YUa5A3lgFgokWMp76zXrxX2jVQ0BfHaw12y860n1+iOi6yFQ==", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "lru-cache": "^10.0.0", + "rust-verkle-wasm": "^0.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-vm": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.4.tgz", + "integrity": "sha512-gsA4IhmtWHI4BofKy3kio9W+dqZQs5Ji5mLjLYxHCkat+JQBUt5szjRKra2F9nGDJ2XcI/wWb0YWUFNgln4zRQ==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.4", + "@nomicfoundation/ethereumjs-blockchain": "7.0.4", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-evm": "2.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-statemanager": "2.0.4", + "@nomicfoundation/ethereumjs-trie": "6.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.5.tgz", + "integrity": "sha512-Tg4zu8RkWpyADSFIgF4FlJIUEI4VkxcvELsmbJn2OokbvH2SnUrqKmw0BBfDrtvP0hhmx8wsnrRKP5DV/oTyTA==", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/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/@nomicfoundation/hardhat-verify/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", + "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", + "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", + "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", + "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", + "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", + "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomiclabs/hardhat-ethers": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", + "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", + "peer": true, + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", + "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", + "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "peer": true + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@openzeppelin/contracts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.1.tgz", + "integrity": "sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==" + }, + "node_modules/@openzeppelin/contracts-upgradeable-4.7.3": { + "name": "@openzeppelin/contracts-upgradeable", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" + }, + "node_modules/@openzeppelin/contracts-v0.7": { + "name": "@openzeppelin/contracts", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz", + "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==" + }, + "node_modules/@openzeppelin/defender-base-client": { + "version": "1.54.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-base-client/-/defender-base-client-1.54.1.tgz", + "integrity": "sha512-DRGz/7KN3ZQwu28YWMOaojrC7jjPkz/uCwkC8/C8B11qwZhA5qIVvyhYHhhFOCl0J84+E3TNdvkPD2q3p2WaJw==", + "dependencies": { + "amazon-cognito-identity-js": "^6.0.1", + "async-retry": "^1.3.3", + "axios": "^1.4.0", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, + "node_modules/@openzeppelin/hardhat-upgrades": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.28.0.tgz", + "integrity": "sha512-7sb/Jf+X+uIufOBnmHR0FJVWuxEs2lpxjJnLNN6eCJCP8nD0v+Ot5lTOW2Qb/GFnh+fLvJtEkhkowz4ZQ57+zQ==", + "dependencies": { + "@openzeppelin/defender-base-client": "^1.46.0", + "@openzeppelin/platform-deploy-client": "^0.8.0", + "@openzeppelin/upgrades-core": "^1.27.0", + "chalk": "^4.1.0", + "debug": "^4.1.1", + "proper-lockfile": "^4.1.1" + }, + "bin": { + "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.1.0", + "ethers": "^5.0.5", + "hardhat": "^2.0.2" + }, + "peerDependenciesMeta": { + "@nomiclabs/harhdat-etherscan": { + "optional": true + } + } + }, + "node_modules/@openzeppelin/merkle-tree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@openzeppelin/merkle-tree/-/merkle-tree-1.0.5.tgz", + "integrity": "sha512-JkwG2ysdHeIphrScNxYagPy6jZeNONgDRyqU6lbFgE8HKCZFSkcP8r6AjZs+3HZk4uRNV0kNBBzuWhKQ3YV7Kw==", + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "ethereum-cryptography": "^1.1.2" + } + }, + "node_modules/@openzeppelin/platform-deploy-client": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/platform-deploy-client/-/platform-deploy-client-0.8.0.tgz", + "integrity": "sha512-POx3AsnKwKSV/ZLOU/gheksj0Lq7Is1q2F3pKmcFjGZiibf+4kjGxr4eSMrT+2qgKYZQH1ZLQZ+SkbguD8fTvA==", + "deprecated": "@openzeppelin/platform-deploy-client is deprecated. Please use @openzeppelin/defender-sdk-deploy-client", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "@openzeppelin/defender-base-client": "^1.46.0", + "axios": "^0.21.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, + "node_modules/@openzeppelin/platform-deploy-client/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@openzeppelin/upgrades-core": { + "version": "1.32.5", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.32.5.tgz", + "integrity": "sha512-R0wprsyJ4xWiRW05kaTfZZkRVpG2g0af3/hpjE7t2mX0Eb2n40MQLokTwqIk4LDzpp910JfLSpB0vBuZ6WNPog==", + "dependencies": { + "cbor": "^9.0.0", + "chalk": "^4.1.0", + "compare-versions": "^6.0.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.0.3", + "minimist": "^1.2.7", + "proper-lockfile": "^4.1.1", + "solidity-ast": "^0.4.51" + }, + "bin": { + "openzeppelin-upgrades-core": "dist/cli/cli.js" + } + }, + "node_modules/@openzeppelin/upgrades-core/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@prb/math": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@prb/math/-/math-4.0.2.tgz", + "integrity": "sha512-kJgqvXR6iyU7+N959RzggSFhBdnRuSDnc/bs8u6MzdWw7aYIUaAr+uMVdpP6Dheypjerd7sfJgFOs19FRFhscg==" + }, + "node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@sentry/core": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", + "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", + "dependencies": { + "@sentry/hub": "6.19.7", + "@sentry/minimal": "6.19.7", + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/hub": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", + "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", + "dependencies": { + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/minimal": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", + "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", + "dependencies": { + "@sentry/hub": "6.19.7", + "@sentry/types": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/node": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", + "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==", + "dependencies": { + "@sentry/core": "6.19.7", + "@sentry/hub": "6.19.7", + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/types": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", + "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", + "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", + "dependencies": { + "@sentry/types": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", + "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", + "dependencies": { + "@sinonjs/commons": "^2.0.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==" + }, + "node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@sphinx-labs/contracts": { + "version": "0.20.4", + "resolved": "https://registry.npmjs.org/@sphinx-labs/contracts/-/contracts-0.20.4.tgz", + "integrity": "sha512-/8/87JNECLQG79eFQdsgJqhNxzuy15WZgdtlMT21cK76j6fU9MZfycIapzg5Im3U64/FNuPGTkRKusAxb/tU/w==", + "dependencies": { + "@gnosis.pm/safe-contracts": "git+https://github.com/safe-global/safe-contracts.git#767ef36bba88bdbc0c9fe3708a4290cabef4c376", + "@openzeppelin/contracts": "4.9.3", + "ethers": "^6.7.0", + "solmate": "6.2.0" + } + }, + "node_modules/@sphinx-labs/contracts/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sphinx-labs/contracts/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sphinx-labs/contracts/node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" + }, + "node_modules/@sphinx-labs/contracts/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/@sphinx-labs/contracts/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "node_modules/@sphinx-labs/contracts/node_modules/ethers": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.11.1.tgz", + "integrity": "sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@sphinx-labs/contracts/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/@sphinx-labs/contracts/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@sphinx-labs/core": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sphinx-labs/core/-/core-0.23.5.tgz", + "integrity": "sha512-2AaRIlb55oJsRuNFFFMKStQO4a5rH+Y7s678+frX8iljtZKVd2Km29AoSOg0rCQ2i0qRvYULsv4VSVNDq4StUQ==", + "dependencies": { + "@amplitude/node": "^1.10.2", + "@eth-optimism/common-ts": "^0.7.1", + "@ethersproject/bignumber": "^5.7.0", + "@nomicfoundation/hardhat-ethers": "^3.0.4", + "@nomicfoundation/hardhat-verify": "^2.0.2", + "@openzeppelin/hardhat-upgrades": "^1.22.1", + "@openzeppelin/merkle-tree": "1.0.5", + "@sphinx-labs/contracts": "^0.20.4", + "axios": "^1.4.0", + "chalk": "^4.1.2", + "core-js": "^3.27.1", + "dotenv": "^16.0.3", + "ethers": "^6.7.0", + "fs": "^0.0.1-security", + "handlebars": "^4.7.7", + "insight": "^0.11.1", + "merkletreejs": "^0.2.18", + "ora": "^5.4.1", + "semver": "^7.3.8", + "solidity-ast": "^0.4.45", + "undici": "^5.21.1", + "yesno": "^0.4.0" + } + }, + "node_modules/@sphinx-labs/core/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sphinx-labs/core/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sphinx-labs/core/node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz", + "integrity": "sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==", + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@sphinx-labs/core/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/@sphinx-labs/core/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "node_modules/@sphinx-labs/core/node_modules/ethers": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.11.1.tgz", + "integrity": "sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@sphinx-labs/core/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/@sphinx-labs/core/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@sphinx-labs/plugins": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/@sphinx-labs/plugins/-/plugins-0.30.8.tgz", + "integrity": "sha512-Sop+68FRCdrwZCIC6qrYH9HVRgdYBRsPnL4yC1v2GDF772nFG0q1FmrSE1KIENacHeY6Icken1oJnFw8AcKRkQ==", + "dependencies": { + "@eth-optimism/contracts": "^0.5.40", + "@ethersproject/bignumber": "^5.7.0", + "@nomicfoundation/hardhat-ethers": "^3.0.5", + "@openzeppelin/contracts": "^4.8.1", + "@openzeppelin/hardhat-upgrades": "^1.22.1", + "@sphinx-labs/contracts": "^0.20.4", + "@sphinx-labs/core": "^0.23.5", + "@swc/core": "1.3.75", + "chalk": "^4.1.2", + "core-js": "^3.31.1", + "dotenv": "^16.0.3", + "ethers": "^6.7.0", + "hardhat": "2.20.1", + "node-fetch": "^2.6.7", + "ora": "^5.4.1", + "p-limit": "^3.1.0", + "semver": "^7.3.7", + "sinon": "^17.0.1", + "solidity-ast": "^0.4.52", + "sphinx-forge-std": "git+https://github.com/foundry-rs/forge-std.git#v1.7.1", + "sphinx-solmate": "npm:solmate@^6.7.0", + "stream-chain": "^2.2.5", + "stream-json": "^1.8.0", + "ts-node": "^10.9.1", + "typescript": "^5.1.3", + "yargs": "^17.7.2", + "yesno": "^0.4.0" + }, + "bin": { + "sphinx": "dist/cli/index.js" + } + }, + "node_modules/@sphinx-labs/plugins/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sphinx-labs/plugins/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sphinx-labs/plugins/node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz", + "integrity": "sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==", + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@sphinx-labs/plugins/node_modules/@openzeppelin/contracts": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", + "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==" + }, + "node_modules/@sphinx-labs/plugins/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/@sphinx-labs/plugins/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "node_modules/@sphinx-labs/plugins/node_modules/ethers": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.11.1.tgz", + "integrity": "sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@sphinx-labs/plugins/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/@sphinx-labs/plugins/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/@sphinx-labs/plugins/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@swc/core": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.75.tgz", + "integrity": "sha512-YLqd5oZVnaOq/OzkjRSsJUQqAfKYiD0fzUyVUPVlNNCoQEfVfSMcXH80hLmYe9aDH0T/a7qEMjWyIr/0kWqy1A==", + "hasInstallScript": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.75", + "@swc/core-darwin-x64": "1.3.75", + "@swc/core-linux-arm-gnueabihf": "1.3.75", + "@swc/core-linux-arm64-gnu": "1.3.75", + "@swc/core-linux-arm64-musl": "1.3.75", + "@swc/core-linux-x64-gnu": "1.3.75", + "@swc/core-linux-x64-musl": "1.3.75", + "@swc/core-win32-arm64-msvc": "1.3.75", + "@swc/core-win32-ia32-msvc": "1.3.75", + "@swc/core-win32-x64-msvc": "1.3.75" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.75.tgz", + "integrity": "sha512-anDnx9L465lGbjB2mvcV54NGHW6illr0IDvVV7JmkabYUVneaRdQvTr0tbHv3xjHnjrK1wuwVOHKV0LcQF2tnQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.75.tgz", + "integrity": "sha512-dIHDfrLmeZfr2xwi1whO7AmzdI3HdamgvxthaL+S8L1x8TeczAZEvsmZTjy3s8p3Va4rbGXcb3+uBhmfkqCbfw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.75.tgz", + "integrity": "sha512-qeJmvMGrjC6xt+G0R4kVqqxvlhxJx7tTzhcEoWgLJnfvGZiF6SJdsef4OSM7HuReXrlBoEtJbfGPrLJtbV+C0w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.75.tgz", + "integrity": "sha512-sqA9JqHEJBF4AdNuwo5zRqq0HC3l31SPsG9zpRa4nRzG5daBBJ80H7fi6PZQud1rfNNq+Q08gjYrdrxwHstvjw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.75.tgz", + "integrity": "sha512-95rQT5xTAL3eKhMJbJbLsZHHP9EUlh1rcrFoLf0gUApoVF8g94QjZ9hYZiI72mMP5WPjgTEXQVnVB9O2GxeaLw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.75.tgz", + "integrity": "sha512-If7UpAhnPduMmtC+TSgPpZ1UXZfp2hIpjUFxpeCmHHYLS6Fn/2GZC5hpEiu+wvFJF0hzPh93eNAHa9gUxGUG+w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.75.tgz", + "integrity": "sha512-HOhxX0YNHTElCZqIviquka3CGYTN8rSQ6BdFfSk/K0O+ZEHx3qGte0qr+gGLPF/237GxreUkp3OMaWKuURtuCg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.75.tgz", + "integrity": "sha512-7QPI+mvBXAerVfWahrgBNe+g7fK8PuetxFnZSEmXUcDXvWcdJXAndD7GjAJzbDyjQpLKHbsDKMiHYvfNxZoN/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.75.tgz", + "integrity": "sha512-EfABCy4Wlq7O5ShWsm32FgDkSjyeyj/SQ4wnUIvWpkXhgfT1iNXky7KRU1HtX+SmnVk/k/NnabVZpIklYbjtZA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.75", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.75.tgz", + "integrity": "sha512-cTvP0pOD9C3pSp1cwtt85ZsrUkQz8RZfSPhM+jCGxKxmoowDCnInoOQ4Ica/ehyuUnQ4/IstSdYtYpO5yzPDJg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/node": { + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@uniswap/permit2": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/Uniswap/permit2.git#cc56ad0f3439c502c246fc5cfcc3db92bb8b7219", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/amazon-cognito-identity-js": { + "version": "6.3.12", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz", + "integrity": "sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==", + "dependencies": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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/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": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "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/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/atomically": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/bcfg": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/bcfg/-/bcfg-0.1.8.tgz", + "integrity": "sha512-1zHJM1/sztv9ldutWyJDZSRYQJEuRBTIzLWZ2J5ncWoWI2T6b4/hahhvQmnzucfeleU5Mx5+bcwCsF2wcWt2vA==", + "dependencies": { + "bsert": "~0.0.10" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/bigint-crypto-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz", + "integrity": "sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "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/bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/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/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/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/bsert": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/bsert/-/bsert-0.0.13.tgz", + "integrity": "sha512-gYzSj8I2lDTKvl4aRSYs2CZIpeJugq7RjGhLRG+Jl//gEW5B2u1MKB6exVCL09FqYj6JRQAAgRwQHMOWvr7A8A==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/bufio": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.1.tgz", + "integrity": "sha512-9oR3zNdupcg/Ge2sSHQF3GX+kmvL/fTPvD0nd5AGLq8SjUYnTz+SlFjK/GXidndbZtIj+pVKXiWeR9w6e9wKCA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "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/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/compare-versions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz", + "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==" + }, + "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/conf": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", + "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", + "dependencies": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-js": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", + "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "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/crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debounce-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", + "dependencies": { + "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/envalid": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/envalid/-/envalid-7.3.1.tgz", + "integrity": "sha512-KL1YRwn8WcoF/Ty7t+yLLtZol01xr9ZJMTjzoGRM8NaSU+nQQjSWOQKKJhJP2P57bpdakJ9jbxqQX4fGTOicZg==", + "dependencies": { + "tslib": "2.3.1" + }, + "engines": { + "node": ">=8.12" + } + }, + "node_modules/envalid/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/es-abstract": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "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.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/ethereumjs-abi/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", + "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-prom-bundle": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/express-prom-bundle/-/express-prom-bundle-6.6.0.tgz", + "integrity": "sha512-tZh2P2p5a8/yxQ5VbRav011Poa4R0mHqdFwn9Swe/obXDe5F0jY9wtRAfNYnqk4LXY7akyvR/nrvAHxQPWUjsQ==", + "dependencies": { + "on-finished": "^2.3.0", + "url-value-parser": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "prom-client": ">=12.0.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" + }, + "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-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-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "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/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/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/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/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/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/har-validator/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/hardhat": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.20.1.tgz", + "integrity": "sha512-q75xDQiQtCZcTMBwjTovrXEU5ECr49baxr4/OBkIu/ULTPzlB20yk1dRWNmD2IFbAeAeXggaWvQAdpiScaHtPw==", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.4", + "@nomicfoundation/ethereumjs-blockchain": "7.0.4", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-evm": "2.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-statemanager": "2.0.4", + "@nomicfoundation/ethereumjs-trie": "6.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/ethereumjs-verkle": "0.0.2", + "@nomicfoundation/ethereumjs-vm": "7.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat/node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat/node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat/node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat/node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat/node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat/node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/hardhat/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/hardhat/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/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/hardhat/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "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.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/insight": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz", + "integrity": "sha512-TBcZ0qC9dgdmcxL93OoqkY/RZXJtIi0i07phX/QyYk2ysmJtZex59dgTj4Doq50N9CG9dLRe/RIudc/5CCoFNw==", + "dependencies": { + "async": "^2.6.2", + "chalk": "^4.1.1", + "conf": "^10.0.1", + "inquirer": "^6.3.1", + "lodash.debounce": "^4.0.8", + "os-name": "^4.0.1", + "request": "^2.88.0", + "tough-cookie": "^4.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-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-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "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-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "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-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "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-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "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-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "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.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, + "node_modules/js-sdsl": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", + "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "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/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json-schema-typed": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==" + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "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.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/macos-release": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", + "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merkletreejs": { + "version": "0.2.32", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.2.32.tgz", + "integrity": "sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ==", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^3.1.9-1", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "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/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "8.1.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/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/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/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/mocha/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/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/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/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mocha/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/mocha/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/mocha/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/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nise": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" + } + }, + "node_modules/nise/node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "engines": { + "node": ">=12.19" + } + }, + "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/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dependencies": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "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-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "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/pino": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", + "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", + "dependencies": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.8", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-multi-stream": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pino-multi-stream/-/pino-multi-stream-5.3.0.tgz", + "integrity": "sha512-4fAGCRll18I+JmoAbxDvU9zc5sera/3c+VgTtUdoNMOZ/VSHB+HMAYtixKpeRmZTDHDDdE2rtwjVkuwWB8mYQA==", + "deprecated": "No longer supported. Use the multi-stream support in the latest core Pino", + "dependencies": { + "pino": "^6.0.0" + } + }, + "node_modules/pino-sentry": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/pino-sentry/-/pino-sentry-0.7.0.tgz", + "integrity": "sha512-/rZO1R/oMcMa4mzfIqW6Afap+TGgVHgB8iZfzwjhLdT2PhyuTUNJ3KJT2eIZ0citsQNv26pxRzIPbqgHuQtUAQ==", + "dependencies": { + "@sentry/node": "^6.2.5", + "commander": "^2.20.0", + "pumpify": "^2.0.1", + "split2": "^3.1.1", + "through2": "^3.0.1" + }, + "bin": { + "pino-sentry": "dist/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pino-sentry/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/pino-std-serializers": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", + "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" + }, + "node_modules/prom-client": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-13.2.0.tgz", + "integrity": "sha512-wGr5mlNNdRNzEhRYXgboUU2LxHWIojxscJKmtG3R8f4/KiWqyYgXTLHs0+Ted7tG3zFT7pgHJbtomzZ1L0ARaQ==", + "dependencies": { + "tdigest": "^0.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "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/qs": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", + "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rust-verkle-wasm": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/rust-verkle-wasm/-/rust-verkle-wasm-0.0.1.tgz", + "integrity": "sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA==" + }, + "node_modules/rustbn-wasm": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn-wasm/-/rustbn-wasm-0.2.0.tgz", + "integrity": "sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg==", + "dependencies": { + "@scure/base": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "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.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sinon": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", + "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.1.0", + "nise": "^5.1.5", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solidity-ast": { + "version": "0.4.56", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.56.tgz", + "integrity": "sha512-HgmsA/Gfklm/M8GFbCX/J1qkVH0spXHgALCNZ8fA8x5X+MFdn/8CP2gr5OVyXjXw6RZTPC/Sxl2RUDQOXyNMeA==", + "dependencies": { + "array.prototype.findlast": "^1.2.2" + } + }, + "node_modules/solmate": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/solmate/-/solmate-6.2.0.tgz", + "integrity": "sha512-AM38ioQ2P8zRsA42zenb9or6OybRjOLXIu3lhIT8rhddUuduCt76pUEuLxOIg9GByGojGz+EbpFdCB6B+QZVVA==" + }, + "node_modules/sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sphinx-forge-std": { + "name": "forge-std", + "version": "1.7.1", + "resolved": "git+ssh://git@github.com/foundry-rs/forge-std.git#f73c73d2018eb6a111f35e4dae7b4f27401e9421", + "license": "(Apache-2.0 OR MIT)" + }, + "node_modules/sphinx-solmate": { + "name": "solmate", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/solmate/-/solmate-6.7.0.tgz", + "integrity": "sha512-iMPr+gKbKjXBB12a+Iz5Tua5r7T4yugHaGXDWSJbBZB4Gr3vLeUUvKeLyMxCWWqk1xlLhFDFFuAmOzeyVBuyvQ==" + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + }, + "node_modules/stream-json": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", + "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.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-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "dependencies": { + "bintrees": "1.0.2" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "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/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dependencies": { - "get-func-name": "^2.0.1" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "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/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, "engines": { "node": "*" } }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "peer": true + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" }, "node_modules/type-detect": { "version": "4.0.8", @@ -998,6 +8466,440 @@ "node": ">=4" } }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "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/undici": { + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "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/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-value-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/url-value-parser/-/url-value-parser-2.2.0.tgz", + "integrity": "sha512-yIQdxJpgkPamPPAPuGdS7Q548rLhny42tg8d4vyTNzFqvOnwqrgHXvgehT09U7fwrzxi3RxCiXjoNUNnNOlQ8A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "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/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "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-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dependencies": { + "execa": "^4.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, "node_modules/ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", @@ -1017,6 +8919,90 @@ "optional": true } } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "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/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yesno": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/yesno/-/yesno-0.4.0.tgz", + "integrity": "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA==" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index f4e1d35e..f2ce102e 100644 --- a/package.json +++ b/package.json @@ -9,19 +9,17 @@ "scripts": { "test": "forge test", "test:fork": "FOUNDRY_PROFILE=CI forge test", - "coverage": "forge coverage --report lcov", - "deploy:ethereum-mainnet": "source .env && forge script Deploy --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_MAINNET -vvv", - "deploy:ethereum-sepolia": "source .env && forge script Deploy --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_SEPOLIA -vvv", - "deploy:optimism-mainnet": "source .env && forge script Deploy --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_MAINNET -vvv", - "deploy:optimism-sepolia": "source .env && forge script Deploy --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_SEPOLIA -vvv", - "deploy:polygon-mainnet": "source .env && forge script Deploy --chain-id 137 --rpc-url $RPC_POLYGON_MAINNET --broadcast --verify --etherscan-api-key $POLYSCAN_API_KEY --interactives 1 --sender $SENDER_POLYGON_MAINNET -vvv", - "deploy:polygon-mumbai": "source .env && forge script Deploy --chain-id 80001 --rpc-url $RPC_POLYGON_MUMBAI --broadcast --verify --etherscan-api-key $POLYSCAN_API_KEY --interactives 1 --sender $SENDER_POLYGON_MUMBAI -vvv" + "coverage": "forge coverage --match-path \"./src/*.sol\" --report lcov --report summary", + "deploy:mainnets": "source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets", + "deploy:testnets": "source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets", + "artifacts": "source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-core'" }, "dependencies": { "@bananapus/permission-ids": "^0.0.2", "@chainlink/contracts": "^0.8.0", "@openzeppelin/contracts": "^5.0.1", "@prb/math": "^4.0.2", - "@uniswap/permit2": "github:Uniswap/permit2" + "@uniswap/permit2": "github:Uniswap/permit2", + "@sphinx-labs/plugins": "^0.30.8" } } \ No newline at end of file diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 00000000..58f08f46 --- /dev/null +++ b/remappings.txt @@ -0,0 +1 @@ +@sphinx-labs/contracts/=lib/sphinx/packages/contracts/contracts/foundry \ No newline at end of file diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol index 021e4dac..73bd0ff2 100644 --- a/script/Deploy.s.sol +++ b/script/Deploy.s.sol @@ -1,7 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.23; -import "forge-std/Script.sol"; +import "@sphinx-labs/contracts/SphinxPlugin.sol"; +import {Script, stdJson, VmSafe} from "forge-std/Script.sol"; +import {CoreDeploymentLib} from "./helpers/CoreDeploymentLib.sol"; + import {IPermit2} from "@uniswap/permit2/src/interfaces/IPermit2.sol"; import {JBPermissions} from "src/JBPermissions.sol"; import {JBProjects} from "src/JBProjects.sol"; @@ -16,55 +19,33 @@ import {JBController} from "src/JBController.sol"; import {JBTerminalStore} from "src/JBTerminalStore.sol"; import {JBMultiTerminal} from "src/JBMultiTerminal.sol"; -contract Deploy is Script { +contract Deploy is Script, Sphinx { /// @notice The universal PERMIT2 address. IPermit2 private constant _PERMIT2 = IPermit2(0x000000000022D473030F116dDEE9F6B43aC78BA3); - function run() public { - uint256 chainId = block.chainid; - address trustedForwarder; - address manager; - // Ethereun Mainnet - if (chainId == 1) { - trustedForwarder = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87; - manager = 0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD; - // Ethereum Sepolia - } else if (chainId == 11_155_111) { - trustedForwarder = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87; - manager = 0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD; - // Optimism Mainnet - } else if (chainId == 420) { - trustedForwarder = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87; - manager = 0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD; - // Optimism Sepolia - } else if (chainId == 11_155_420) { - trustedForwarder = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87; - manager = 0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD; - // Polygon Mainnet - } else if (chainId == 137) { - trustedForwarder = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87; - manager = 0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD; - // Polygon Mumbai - } else if (chainId == 80_001) { - trustedForwarder = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87; - manager = 0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD; - } else { - revert("Invalid RPC / no juice contracts deployed on this network"); - } + /// @notice The address that is allowed to forward calls to the terminal and controller on a users behalf. + address private constant TRUSTED_FORWARDER = 0xB2b5841DBeF766d4b521221732F9B618fCf34A87; + + /// @notice The address that will manage the few privileged functions of the protocol. + address private constant MANAGER = 0x823b92d6a4b2AED4b15675c7917c9f922ea8ADAD; - vm.startBroadcast(); - _deployJBProtocol(manager, trustedForwarder); - vm.stopBroadcast(); + function configureSphinx() public override { + // TODO: Update to contain JB Emergency Developers + sphinxConfig.owners = [0x26416423d530b1931A2a7a6b7D435Fac65eED27d]; + sphinxConfig.orgId = "cltepuu9u0003j58rjtbd0hvu"; + sphinxConfig.projectName = "nana-core"; + sphinxConfig.threshold = 1; + sphinxConfig.mainnets = ["ethereum", "optimism", "polygon"]; + sphinxConfig.testnets = ["ethereum_sepolia", "optimism_sepolia", "polygon_mumbai"]; } /// @notice Deploys the protocol. - /// @param manager The address that will manage the few privileged functions of the protocol. - /// @param trustedForwarder The address that is allowed to forward calls to the terminal and controller on a payer's - /// behalf. - function _deployJBProtocol(address manager, address trustedForwarder) private { + function run() public sphinx { + address _sender = safeAddress(); + JBPermissions permissions = new JBPermissions(); - JBProjects projects = new JBProjects(manager); - JBDirectory directory = new JBDirectory(permissions, projects, msg.sender); + JBProjects projects = new JBProjects(MANAGER); + JBDirectory directory = new JBDirectory(permissions, projects, _sender); JBSplits splits = new JBSplits(directory); JBRulesets rulesets = new JBRulesets(directory); directory.setIsAllowedToSetFirstController( @@ -77,12 +58,12 @@ contract Deploy is Script { tokens: new JBTokens(directory), splits: splits, fundAccessLimits: new JBFundAccessLimits(directory), - trustedForwarder: trustedForwarder + trustedForwarder: TRUSTED_FORWARDER }) ), true ); - directory.transferOwnership(manager); + directory.transferOwnership(MANAGER); new JBMultiTerminal({ permissions: permissions, projects: projects, @@ -91,11 +72,11 @@ contract Deploy is Script { store: new JBTerminalStore({ directory: directory, rulesets: rulesets, - prices: new JBPrices(permissions, projects, manager) + prices: new JBPrices(permissions, projects, MANAGER) }), - feelessAddresses: new JBFeelessAddresses(manager), + feelessAddresses: new JBFeelessAddresses(MANAGER), permit2: _PERMIT2, - trustedForwarder: trustedForwarder + trustedForwarder: TRUSTED_FORWARDER }); } } diff --git a/script/helpers/CoreDeploymentLib.sol b/script/helpers/CoreDeploymentLib.sol new file mode 100644 index 00000000..27272f6f --- /dev/null +++ b/script/helpers/CoreDeploymentLib.sol @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.23; + +import {stdJson} from "forge-std/Script.sol"; +import {Vm} from "forge-std/Vm.sol"; + +import {JBPermissions} from "../../src/JBPermissions.sol"; +import {JBProjects} from "../../src/JBProjects.sol"; +import {JBPrices} from "../../src/JBPrices.sol"; +import {JBRulesets} from "../../src/JBRulesets.sol"; +import {JBDirectory} from "../../src/JBDirectory.sol"; +import {JBTokens} from "../../src/JBTokens.sol"; +import {JBSplits} from "../../src/JBSplits.sol"; +import {JBFeelessAddresses} from "../../src/JBFeelessAddresses.sol"; +import {JBFundAccessLimits} from "../../src/JBFundAccessLimits.sol"; +import {JBController} from "../../src/JBController.sol"; +import {JBTerminalStore} from "../../src/JBTerminalStore.sol"; +import {JBMultiTerminal} from "../../src/JBMultiTerminal.sol"; + +import {SphinxConstants, NetworkInfo} from "@sphinx-labs/contracts/SphinxConstants.sol"; + +struct CoreDeployment { + JBPermissions permissions; + JBProjects projects; + JBDirectory directory; + JBSplits splits; + JBRulesets rulesets; + JBController controller; + JBMultiTerminal terminal; + JBTerminalStore terminalStore; + JBPrices prices; + JBFeelessAddresses feeless; + JBFundAccessLimits fundAccess; + JBTokens tokens; +} + +library CoreDeploymentLib { + // Cheat code address, 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D. + address internal constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code")))); + Vm internal constant vm = Vm(VM_ADDRESS); + + function getDeployment(string memory path) internal returns (CoreDeployment memory deployment) { + // get chainId for which we need to get the deployment. + uint256 chainId = block.chainid; + + // Deploy to get the constants. + // TODO: get constants without deploy. + SphinxConstants sphinxConstants = new SphinxConstants(); + NetworkInfo[] memory networks = sphinxConstants.getNetworkInfoArray(); + + for (uint256 _i; _i < networks.length; _i++) { + if (networks[_i].chainId == chainId) { + return getDeployment(path, networks[_i].name); + } + } + + revert("ChainID is not (currently) supported by Sphinx."); + } + + function getDeployment( + string memory path, + string memory network_name + ) + internal + view + returns (CoreDeployment memory deployment) + { + deployment.permissions = JBPermissions(_getDeploymentAddress(path, "nana-core", network_name, "JBPermissions")); + + deployment.projects = JBProjects(_getDeploymentAddress(path, "nana-core", network_name, "JBProjects")); + + deployment.directory = JBDirectory(_getDeploymentAddress(path, "nana-core", network_name, "JBDirectory")); + + deployment.splits = JBSplits(_getDeploymentAddress(path, "nana-core", network_name, "JBSplits")); + + deployment.rulesets = JBRulesets(_getDeploymentAddress(path, "nana-core", network_name, "JBRulesets")); + + deployment.controller = JBController(_getDeploymentAddress(path, "nana-core", network_name, "JBController")); + + deployment.terminal = JBMultiTerminal(_getDeploymentAddress(path, "nana-core", network_name, "JBMultiTerminal")); + + deployment.terminalStore = + JBTerminalStore(_getDeploymentAddress(path, "nana-core", network_name, "JBTerminalStore")); + + deployment.prices = JBPrices(_getDeploymentAddress(path, "nana-core", network_name, "JBPrices")); + + deployment.feeless = + JBFeelessAddresses(_getDeploymentAddress(path, "nana-core", network_name, "JBFeelessAddresses")); + + deployment.fundAccess = + JBFundAccessLimits(_getDeploymentAddress(path, "nana-core", network_name, "JBFundAccessLimits")); + + deployment.tokens = JBTokens(_getDeploymentAddress(path, "nana-core", network_name, "JBTokens")); + } + + /// @notice Get the address of a contract that was deployed by the Deploy script. + /// @dev Reverts if the contract was not found. + /// @param path The path to the deployment file. + /// @param contractName The name of the contract to get the address of. + /// @return The address of the contract. + function _getDeploymentAddress( + string memory path, + string memory project_name, + string memory network_name, + string memory contractName + ) + internal + view + returns (address) + { + string memory deploymentJson = + vm.readFile(string.concat(path, project_name, "/", network_name, "/", contractName, ".json")); + return stdJson.readAddress(deploymentJson, ".address"); + } +}