Skip to content

Instantly share code, notes, and snippets.

@fhofman
Created November 10, 2022 16:40
Show Gist options
  • Save fhofman/a9a92745e1c193a198710ab2b1994023 to your computer and use it in GitHub Desktop.
Save fhofman/a9a92745e1c193a198710ab2b1994023 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.4+commit.c7e474f2.js&optimize=false&runs=200&gist=
{
"id": "467c766a1451c6a017638b13ad68e7f2",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.4",
"solcLongVersion": "0.8.4+commit.c7e474f2",
"input": {
"language": "Solidity",
"sources": {
"fractionalArt/TokenVault.sol": {
"content": ""
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"errors": [
{
"component": "general",
"errorCode": "1878",
"formattedMessage": "Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> fractionalArt/TokenVault.sol\n\n",
"message": "SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.",
"severity": "warning",
"sourceLocation": {
"end": -1,
"file": "fractionalArt/TokenVault.sol",
"start": -1
},
"type": "Warning"
},
{
"component": "general",
"errorCode": "3420",
"formattedMessage": "Warning: Source file does not specify required compiler version! Consider adding \"pragma solidity ^0.8.4;\"\n--> fractionalArt/TokenVault.sol\n\n",
"message": "Source file does not specify required compiler version! Consider adding \"pragma solidity ^0.8.4;\"",
"severity": "warning",
"sourceLocation": {
"end": -1,
"file": "fractionalArt/TokenVault.sol",
"start": -1
},
"type": "Warning"
}
],
"sources": {
"fractionalArt/TokenVault.sol": {
"ast": {
"absolutePath": "fractionalArt/TokenVault.sol",
"exportedSymbols": {},
"id": 1,
"nodeType": "SourceUnit",
"nodes": [],
"src": "0:0:0"
},
"id": 0
}
}
}
}
{
"id": "6dd9e841ebf8cae57848fcbe6b4b4cbe",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.4",
"solcLongVersion": "0.8.4+commit.c7e474f2",
"input": {
"language": "Solidity",
"sources": {
"fractionalArt/Settings.sol": {
"content": ""
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"errors": [
{
"component": "general",
"errorCode": "1878",
"formattedMessage": "Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> fractionalArt/Settings.sol\n\n",
"message": "SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.",
"severity": "warning",
"sourceLocation": {
"end": -1,
"file": "fractionalArt/Settings.sol",
"start": -1
},
"type": "Warning"
},
{
"component": "general",
"errorCode": "3420",
"formattedMessage": "Warning: Source file does not specify required compiler version! Consider adding \"pragma solidity ^0.8.4;\"\n--> fractionalArt/Settings.sol\n\n",
"message": "Source file does not specify required compiler version! Consider adding \"pragma solidity ^0.8.4;\"",
"severity": "warning",
"sourceLocation": {
"end": -1,
"file": "fractionalArt/Settings.sol",
"start": -1
},
"type": "Warning"
}
],
"sources": {
"fractionalArt/Settings.sol": {
"ast": {
"absolutePath": "fractionalArt/Settings.sol",
"exportedSymbols": {},
"id": 1,
"nodeType": "SourceUnit",
"nodes": [],
"src": "0:0:0"
},
"id": 0
}
}
}
}
{
"id": "dbd145e14355c10541a45512aa0ce766",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.4",
"solcLongVersion": "0.8.4+commit.c7e474f2",
"input": {
"language": "Solidity",
"sources": {
"fractionalArt/ERC721HolderUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"./Interfaces/IERC721ReceiverUpgradeable.sol\";\nimport \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers.\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(\n address,\n address,\n uint256,\n bytes memory\n ) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}"
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n * constructor.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: setting the version to 255 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized != type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n\n /**\n * @dev Internal function that returns the initialized version. Returns `_initialized`\n */\n function _getInitializedVersion() internal view returns (uint8) {\n return _initialized;\n }\n\n /**\n * @dev Internal function that returns the initialized version. Returns `_initializing`\n */\n function _isInitializing() internal view returns (bool) {\n return _initializing;\n }\n}\n"
},
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\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 IERC721ReceiverUpgradeable {\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 reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(\n address operator,\n address from,\n uint256 tokenId,\n bytes calldata data\n ) external returns (bytes4);\n}"
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\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, it is bubbled up by this\n * function (like regular Solidity function calls).\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 * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\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 * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n *\n * _Available since v4.8._\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n if (success) {\n if (returndata.length == 0) {\n // only check isContract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n require(isContract(target), \"Address: call to non-contract\");\n }\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason or using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n function _revert(bytes memory returndata, string memory errorMessage) 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(errorMessage);\n }\n }\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"fractionalArt/ERC721HolderUpgradeable.sol": {
"ERC721HolderUpgradeable": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Implementation of the {IERC721Receiver} interface. Accepts all token transfers. Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.",
"kind": "dev",
"methods": {
"onERC721Received(address,address,uint256,bytes)": {
"details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`."
}
},
"version": 1
},
"evm": {
"assembly": " /* \"fractionalArt/ERC721HolderUpgradeable.sol\":466:1105 contract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"fractionalArt/ERC721HolderUpgradeable.sol\":466:1105 contract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x150b7a02\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"fractionalArt/ERC721HolderUpgradeable.sol\":872:1072 function onERC721Received(... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"fractionalArt/ERC721HolderUpgradeable.sol\":1010:1016 bytes4 */\n 0x00\n /* \"fractionalArt/ERC721HolderUpgradeable.sol\":1035:1065 this.onERC721Received.selector */\n shl(0xe0, 0x150b7a02)\n /* \"fractionalArt/ERC721HolderUpgradeable.sol\":1028:1065 return this.onERC721Received.selector */\n swap1\n pop\n /* \"fractionalArt/ERC721HolderUpgradeable.sol\":872:1072 function onERC721Received(... */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:350 */\n tag_12:\n /* \"#utility.yul\":84:89 */\n 0x00\n /* \"#utility.yul\":109:174 */\n tag_14\n /* \"#utility.yul\":125:173 */\n tag_15\n /* \"#utility.yul\":166:172 */\n dup5\n /* \"#utility.yul\":125:173 */\n tag_16\n jump\t// in\n tag_15:\n /* \"#utility.yul\":109:174 */\n tag_17\n jump\t// in\n tag_14:\n /* \"#utility.yul\":100:174 */\n swap1\n pop\n /* \"#utility.yul\":197:203 */\n dup3\n /* \"#utility.yul\":190:195 */\n dup2\n /* \"#utility.yul\":183:204 */\n mstore\n /* \"#utility.yul\":235:239 */\n 0x20\n /* \"#utility.yul\":228:233 */\n dup2\n /* \"#utility.yul\":224:240 */\n add\n /* \"#utility.yul\":273:276 */\n dup5\n /* \"#utility.yul\":264:270 */\n dup5\n /* \"#utility.yul\":259:262 */\n dup5\n /* \"#utility.yul\":255:271 */\n add\n /* \"#utility.yul\":252:277 */\n gt\n /* \"#utility.yul\":249:251 */\n iszero\n tag_18\n jumpi\n /* \"#utility.yul\":290:291 */\n 0x00\n /* \"#utility.yul\":287:288 */\n dup1\n /* \"#utility.yul\":280:292 */\n revert\n /* \"#utility.yul\":249:251 */\n tag_18:\n /* \"#utility.yul\":303:344 */\n tag_19\n /* \"#utility.yul\":337:343 */\n dup5\n /* \"#utility.yul\":332:335 */\n dup3\n /* \"#utility.yul\":327:330 */\n dup6\n /* \"#utility.yul\":303:344 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":90:350 */\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":356:495 */\n tag_21:\n /* \"#utility.yul\":402:407 */\n 0x00\n /* \"#utility.yul\":440:446 */\n dup2\n /* \"#utility.yul\":427:447 */\n calldataload\n /* \"#utility.yul\":418:447 */\n swap1\n pop\n /* \"#utility.yul\":456:489 */\n tag_23\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":456:489 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":408:495 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":514:785 */\n tag_25:\n /* \"#utility.yul\":569:574 */\n 0x00\n /* \"#utility.yul\":618:621 */\n dup3\n /* \"#utility.yul\":611:615 */\n 0x1f\n /* \"#utility.yul\":603:609 */\n dup4\n /* \"#utility.yul\":599:616 */\n add\n /* \"#utility.yul\":595:622 */\n slt\n /* \"#utility.yul\":585:587 */\n tag_27\n jumpi\n /* \"#utility.yul\":636:637 */\n 0x00\n /* \"#utility.yul\":633:634 */\n dup1\n /* \"#utility.yul\":626:638 */\n revert\n /* \"#utility.yul\":585:587 */\n tag_27:\n /* \"#utility.yul\":676:682 */\n dup2\n /* \"#utility.yul\":663:683 */\n calldataload\n /* \"#utility.yul\":701:779 */\n tag_28\n /* \"#utility.yul\":775:778 */\n dup5\n /* \"#utility.yul\":767:773 */\n dup3\n /* \"#utility.yul\":760:764 */\n 0x20\n /* \"#utility.yul\":752:758 */\n dup7\n /* \"#utility.yul\":748:765 */\n add\n /* \"#utility.yul\":701:779 */\n tag_12\n jump\t// in\n tag_28:\n /* \"#utility.yul\":692:779 */\n swap2\n pop\n /* \"#utility.yul\":575:785 */\n pop\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":791:930 */\n tag_29:\n /* \"#utility.yul\":837:842 */\n 0x00\n /* \"#utility.yul\":875:881 */\n dup2\n /* \"#utility.yul\":862:882 */\n calldataload\n /* \"#utility.yul\":853:882 */\n swap1\n pop\n /* \"#utility.yul\":891:924 */\n tag_31\n /* \"#utility.yul\":918:923 */\n dup2\n /* \"#utility.yul\":891:924 */\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":843:930 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":936:1745 */\n tag_6:\n /* \"#utility.yul\":1031:1037 */\n 0x00\n /* \"#utility.yul\":1039:1045 */\n dup1\n /* \"#utility.yul\":1047:1053 */\n 0x00\n /* \"#utility.yul\":1055:1061 */\n dup1\n /* \"#utility.yul\":1104:1107 */\n 0x80\n /* \"#utility.yul\":1092:1101 */\n dup6\n /* \"#utility.yul\":1083:1090 */\n dup8\n /* \"#utility.yul\":1079:1102 */\n sub\n /* \"#utility.yul\":1075:1108 */\n slt\n /* \"#utility.yul\":1072:1074 */\n iszero\n tag_34\n jumpi\n /* \"#utility.yul\":1121:1122 */\n 0x00\n /* \"#utility.yul\":1118:1119 */\n dup1\n /* \"#utility.yul\":1111:1123 */\n revert\n /* \"#utility.yul\":1072:1074 */\n tag_34:\n /* \"#utility.yul\":1164:1165 */\n 0x00\n /* \"#utility.yul\":1189:1242 */\n tag_35\n /* \"#utility.yul\":1234:1241 */\n dup8\n /* \"#utility.yul\":1225:1231 */\n dup3\n /* \"#utility.yul\":1214:1223 */\n dup9\n /* \"#utility.yul\":1210:1232 */\n add\n /* \"#utility.yul\":1189:1242 */\n tag_21\n jump\t// in\n tag_35:\n /* \"#utility.yul\":1179:1242 */\n swap5\n pop\n /* \"#utility.yul\":1135:1252 */\n pop\n /* \"#utility.yul\":1291:1293 */\n 0x20\n /* \"#utility.yul\":1317:1370 */\n tag_36\n /* \"#utility.yul\":1362:1369 */\n dup8\n /* \"#utility.yul\":1353:1359 */\n dup3\n /* \"#utility.yul\":1342:1351 */\n dup9\n /* \"#utility.yul\":1338:1360 */\n add\n /* \"#utility.yul\":1317:1370 */\n tag_21\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1307:1370 */\n swap4\n pop\n /* \"#utility.yul\":1262:1380 */\n pop\n /* \"#utility.yul\":1419:1421 */\n 0x40\n /* \"#utility.yul\":1445:1498 */\n tag_37\n /* \"#utility.yul\":1490:1497 */\n dup8\n /* \"#utility.yul\":1481:1487 */\n dup3\n /* \"#utility.yul\":1470:1479 */\n dup9\n /* \"#utility.yul\":1466:1488 */\n add\n /* \"#utility.yul\":1445:1498 */\n tag_29\n jump\t// in\n tag_37:\n /* \"#utility.yul\":1435:1498 */\n swap3\n pop\n /* \"#utility.yul\":1390:1508 */\n pop\n /* \"#utility.yul\":1575:1577 */\n 0x60\n /* \"#utility.yul\":1564:1573 */\n dup6\n /* \"#utility.yul\":1560:1578 */\n add\n /* \"#utility.yul\":1547:1579 */\n calldataload\n /* \"#utility.yul\":1606:1624 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1598:1604 */\n dup2\n /* \"#utility.yul\":1595:1625 */\n gt\n /* \"#utility.yul\":1592:1594 */\n iszero\n tag_38\n jumpi\n /* \"#utility.yul\":1638:1639 */\n 0x00\n /* \"#utility.yul\":1635:1636 */\n dup1\n /* \"#utility.yul\":1628:1640 */\n revert\n /* \"#utility.yul\":1592:1594 */\n tag_38:\n /* \"#utility.yul\":1666:1728 */\n tag_39\n /* \"#utility.yul\":1720:1727 */\n dup8\n /* \"#utility.yul\":1711:1717 */\n dup3\n /* \"#utility.yul\":1700:1709 */\n dup9\n /* \"#utility.yul\":1696:1718 */\n add\n /* \"#utility.yul\":1666:1728 */\n tag_25\n jump\t// in\n tag_39:\n /* \"#utility.yul\":1656:1728 */\n swap2\n pop\n /* \"#utility.yul\":1518:1738 */\n pop\n /* \"#utility.yul\":1062:1745 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":1751:1866 */\n tag_40:\n /* \"#utility.yul\":1836:1859 */\n tag_42\n /* \"#utility.yul\":1853:1858 */\n dup2\n /* \"#utility.yul\":1836:1859 */\n tag_43\n jump\t// in\n tag_42:\n /* \"#utility.yul\":1831:1834 */\n dup3\n /* \"#utility.yul\":1824:1860 */\n mstore\n /* \"#utility.yul\":1814:1866 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1872:2090 */\n tag_9:\n /* \"#utility.yul\":1963:1967 */\n 0x00\n /* \"#utility.yul\":2001:2003 */\n 0x20\n /* \"#utility.yul\":1990:1999 */\n dup3\n /* \"#utility.yul\":1986:2004 */\n add\n /* \"#utility.yul\":1978:2004 */\n swap1\n pop\n /* \"#utility.yul\":2014:2083 */\n tag_45\n /* \"#utility.yul\":2080:2081 */\n 0x00\n /* \"#utility.yul\":2069:2078 */\n dup4\n /* \"#utility.yul\":2065:2082 */\n add\n /* \"#utility.yul\":2056:2062 */\n dup5\n /* \"#utility.yul\":2014:2083 */\n tag_40\n jump\t// in\n tag_45:\n /* \"#utility.yul\":1968:2090 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2096:2225 */\n tag_17:\n /* \"#utility.yul\":2130:2136 */\n 0x00\n /* \"#utility.yul\":2157:2177 */\n tag_47\n tag_48\n jump\t// in\n tag_47:\n /* \"#utility.yul\":2147:2177 */\n swap1\n pop\n /* \"#utility.yul\":2186:2219 */\n tag_49\n /* \"#utility.yul\":2214:2218 */\n dup3\n /* \"#utility.yul\":2206:2212 */\n dup3\n /* \"#utility.yul\":2186:2219 */\n tag_50\n jump\t// in\n tag_49:\n /* \"#utility.yul\":2137:2225 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2231:2306 */\n tag_48:\n /* \"#utility.yul\":2264:2270 */\n 0x00\n /* \"#utility.yul\":2297:2299 */\n 0x40\n /* \"#utility.yul\":2291:2300 */\n mload\n /* \"#utility.yul\":2281:2300 */\n swap1\n pop\n /* \"#utility.yul\":2271:2306 */\n swap1\n jump\t// out\n /* \"#utility.yul\":2312:2619 */\n tag_16:\n /* \"#utility.yul\":2373:2377 */\n 0x00\n /* \"#utility.yul\":2463:2481 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2455:2461 */\n dup3\n /* \"#utility.yul\":2452:2482 */\n gt\n /* \"#utility.yul\":2449:2451 */\n iszero\n tag_53\n jumpi\n /* \"#utility.yul\":2485:2503 */\n tag_54\n tag_55\n jump\t// in\n tag_54:\n /* \"#utility.yul\":2449:2451 */\n tag_53:\n /* \"#utility.yul\":2523:2552 */\n tag_56\n /* \"#utility.yul\":2545:2551 */\n dup3\n /* \"#utility.yul\":2523:2552 */\n tag_57\n jump\t// in\n tag_56:\n /* \"#utility.yul\":2515:2552 */\n swap1\n pop\n /* \"#utility.yul\":2607:2611 */\n 0x20\n /* \"#utility.yul\":2601:2605 */\n dup2\n /* \"#utility.yul\":2597:2612 */\n add\n /* \"#utility.yul\":2589:2612 */\n swap1\n pop\n /* \"#utility.yul\":2378:2619 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2625:2721 */\n tag_58:\n /* \"#utility.yul\":2662:2669 */\n 0x00\n /* \"#utility.yul\":2691:2715 */\n tag_60\n /* \"#utility.yul\":2709:2714 */\n dup3\n /* \"#utility.yul\":2691:2715 */\n tag_61\n jump\t// in\n tag_60:\n /* \"#utility.yul\":2680:2715 */\n swap1\n pop\n /* \"#utility.yul\":2670:2721 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2727:2876 */\n tag_43:\n /* \"#utility.yul\":2763:2770 */\n 0x00\n /* \"#utility.yul\":2803:2869 */\n 0xffffffff00000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2796:2801 */\n dup3\n /* \"#utility.yul\":2792:2870 */\n and\n /* \"#utility.yul\":2781:2870 */\n swap1\n pop\n /* \"#utility.yul\":2771:2876 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2882:3008 */\n tag_61:\n /* \"#utility.yul\":2919:2926 */\n 0x00\n /* \"#utility.yul\":2959:3001 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":2952:2957 */\n dup3\n /* \"#utility.yul\":2948:3002 */\n and\n /* \"#utility.yul\":2937:3002 */\n swap1\n pop\n /* \"#utility.yul\":2927:3008 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3014:3091 */\n tag_64:\n /* \"#utility.yul\":3051:3058 */\n 0x00\n /* \"#utility.yul\":3080:3085 */\n dup2\n /* \"#utility.yul\":3069:3085 */\n swap1\n pop\n /* \"#utility.yul\":3059:3091 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3097:3251 */\n tag_20:\n /* \"#utility.yul\":3181:3187 */\n dup3\n /* \"#utility.yul\":3176:3179 */\n dup2\n /* \"#utility.yul\":3171:3174 */\n dup4\n /* \"#utility.yul\":3158:3188 */\n calldatacopy\n /* \"#utility.yul\":3243:3244 */\n 0x00\n /* \"#utility.yul\":3234:3240 */\n dup4\n /* \"#utility.yul\":3229:3232 */\n dup4\n /* \"#utility.yul\":3225:3241 */\n add\n /* \"#utility.yul\":3218:3245 */\n mstore\n /* \"#utility.yul\":3148:3251 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3257:3538 */\n tag_50:\n /* \"#utility.yul\":3340:3367 */\n tag_68\n /* \"#utility.yul\":3362:3366 */\n dup3\n /* \"#utility.yul\":3340:3367 */\n tag_57\n jump\t// in\n tag_68:\n /* \"#utility.yul\":3332:3338 */\n dup2\n /* \"#utility.yul\":3328:3368 */\n add\n /* \"#utility.yul\":3470:3476 */\n dup2\n /* \"#utility.yul\":3458:3468 */\n dup2\n /* \"#utility.yul\":3455:3477 */\n lt\n /* \"#utility.yul\":3434:3452 */\n 0xffffffffffffffff\n /* \"#utility.yul\":3422:3432 */\n dup3\n /* \"#utility.yul\":3419:3453 */\n gt\n /* \"#utility.yul\":3416:3478 */\n or\n /* \"#utility.yul\":3413:3415 */\n iszero\n tag_69\n jumpi\n /* \"#utility.yul\":3481:3499 */\n tag_70\n tag_55\n jump\t// in\n tag_70:\n /* \"#utility.yul\":3413:3415 */\n tag_69:\n /* \"#utility.yul\":3521:3531 */\n dup1\n /* \"#utility.yul\":3517:3519 */\n 0x40\n /* \"#utility.yul\":3510:3532 */\n mstore\n /* \"#utility.yul\":3300:3538 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3544:3724 */\n tag_55:\n /* \"#utility.yul\":3592:3669 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":3589:3590 */\n 0x00\n /* \"#utility.yul\":3582:3670 */\n mstore\n /* \"#utility.yul\":3689:3693 */\n 0x41\n /* \"#utility.yul\":3686:3687 */\n 0x04\n /* \"#utility.yul\":3679:3694 */\n mstore\n /* \"#utility.yul\":3713:3717 */\n 0x24\n /* \"#utility.yul\":3710:3711 */\n 0x00\n /* \"#utility.yul\":3703:3718 */\n revert\n /* \"#utility.yul\":3730:3832 */\n tag_57:\n /* \"#utility.yul\":3771:3777 */\n 0x00\n /* \"#utility.yul\":3822:3824 */\n 0x1f\n /* \"#utility.yul\":3818:3825 */\n not\n /* \"#utility.yul\":3813:3815 */\n 0x1f\n /* \"#utility.yul\":3806:3811 */\n dup4\n /* \"#utility.yul\":3802:3816 */\n add\n /* \"#utility.yul\":3798:3826 */\n and\n /* \"#utility.yul\":3788:3826 */\n swap1\n pop\n /* \"#utility.yul\":3778:3832 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3838:3960 */\n tag_24:\n /* \"#utility.yul\":3911:3935 */\n tag_74\n /* \"#utility.yul\":3929:3934 */\n dup2\n /* \"#utility.yul\":3911:3935 */\n tag_58\n jump\t// in\n tag_74:\n /* \"#utility.yul\":3904:3909 */\n dup2\n /* \"#utility.yul\":3901:3936 */\n eq\n /* \"#utility.yul\":3891:3893 */\n tag_75\n jumpi\n /* \"#utility.yul\":3950:3951 */\n 0x00\n /* \"#utility.yul\":3947:3948 */\n dup1\n /* \"#utility.yul\":3940:3952 */\n revert\n /* \"#utility.yul\":3891:3893 */\n tag_75:\n /* \"#utility.yul\":3881:3960 */\n pop\n jump\t// out\n /* \"#utility.yul\":3966:4088 */\n tag_32:\n /* \"#utility.yul\":4039:4063 */\n tag_77\n /* \"#utility.yul\":4057:4062 */\n dup2\n /* \"#utility.yul\":4039:4063 */\n tag_64\n jump\t// in\n tag_77:\n /* \"#utility.yul\":4032:4037 */\n dup2\n /* \"#utility.yul\":4029:4064 */\n eq\n /* \"#utility.yul\":4019:4021 */\n tag_78\n jumpi\n /* \"#utility.yul\":4078:4079 */\n 0x00\n /* \"#utility.yul\":4075:4076 */\n dup1\n /* \"#utility.yul\":4068:4080 */\n revert\n /* \"#utility.yul\":4019:4021 */\n tag_78:\n /* \"#utility.yul\":4009:4088 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220cc98a2abed81e1492dd64fbea2da837f4ffcc94d267efa7c3a3e7d19d4100c8764736f6c63430008040033\n}\n",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "608060405234801561001057600080fd5b5061034d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61004a60048036038101906100459190610106565b610060565b6040516100579190610190565b60405180910390f35b600063150b7a0260e01b9050949350505050565b6000610087610082846101d0565b6101ab565b90508281526020810184848401111561009f57600080fd5b6100aa848285610269565b509392505050565b6000813590506100c1816102e9565b92915050565b600082601f8301126100d857600080fd5b81356100e8848260208601610074565b91505092915050565b60008135905061010081610300565b92915050565b6000806000806080858703121561011c57600080fd5b600061012a878288016100b2565b945050602061013b878288016100b2565b935050604061014c878288016100f1565b925050606085013567ffffffffffffffff81111561016957600080fd5b610175878288016100c7565b91505092959194509250565b61018a81610213565b82525050565b60006020820190506101a56000830184610181565b92915050565b60006101b56101c6565b90506101c18282610278565b919050565b6000604051905090565b600067ffffffffffffffff8211156101eb576101ea6102a9565b5b6101f4826102d8565b9050602081019050919050565b600061020c8261023f565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b610281826102d8565b810181811067ffffffffffffffff821117156102a05761029f6102a9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6102f281610201565b81146102fd57600080fd5b50565b6103098161025f565b811461031457600080fd5b5056fea2646970667358221220cc98a2abed81e1492dd64fbea2da837f4ffcc94d267efa7c3a3e7d19d4100c8764736f6c63430008040033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x190 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH4 0x150B7A02 PUSH1 0xE0 SHL SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x87 PUSH2 0x82 DUP5 PUSH2 0x1D0 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAA DUP5 DUP3 DUP6 PUSH2 0x269 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC1 DUP2 PUSH2 0x2E9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE8 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x74 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x100 DUP2 PUSH2 0x300 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x12A DUP8 DUP3 DUP9 ADD PUSH2 0xB2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x13B DUP8 DUP3 DUP9 ADD PUSH2 0xB2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x14C DUP8 DUP3 DUP9 ADD PUSH2 0xF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x175 DUP8 DUP3 DUP9 ADD PUSH2 0xC7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x18A DUP2 PUSH2 0x213 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1A5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x181 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B5 PUSH2 0x1C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1C1 DUP3 DUP3 PUSH2 0x278 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1EB JUMPI PUSH2 0x1EA PUSH2 0x2A9 JUMP JUMPDEST JUMPDEST PUSH2 0x1F4 DUP3 PUSH2 0x2D8 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20C DUP3 PUSH2 0x23F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH2 0x281 DUP3 PUSH2 0x2D8 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2A0 JUMPI PUSH2 0x29F PUSH2 0x2A9 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2F2 DUP2 PUSH2 0x201 JUMP JUMPDEST DUP2 EQ PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x309 DUP2 PUSH2 0x25F JUMP JUMPDEST DUP2 EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC SWAP9 LOG2 0xAB 0xED DUP2 0xE1 0x49 0x2D 0xD6 0x4F 0xBE LOG2 0xDA DUP4 PUSH32 0x4FFCC94D267EFA7C3A3E7D19D4100C8764736F6C634300080400330000000000 ",
"sourceMap": "466:639:0:-:0;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:4091:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "90:260:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "100:74:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "166:6:4"
}
],
"functionName": {
"name": "array_allocation_size_t_bytes_memory_ptr",
"nodeType": "YulIdentifier",
"src": "125:40:4"
},
"nodeType": "YulFunctionCall",
"src": "125:48:4"
}
],
"functionName": {
"name": "allocate_memory",
"nodeType": "YulIdentifier",
"src": "109:15:4"
},
"nodeType": "YulFunctionCall",
"src": "109:65:4"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "100:5:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "190:5:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "197:6:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "183:6:4"
},
"nodeType": "YulFunctionCall",
"src": "183:21:4"
},
"nodeType": "YulExpressionStatement",
"src": "183:21:4"
},
{
"nodeType": "YulVariableDeclaration",
"src": "213:27:4",
"value": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "228:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "235:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "224:3:4"
},
"nodeType": "YulFunctionCall",
"src": "224:16:4"
},
"variables": [
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "217:3:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "278:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "287:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "290:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "280:6:4"
},
"nodeType": "YulFunctionCall",
"src": "280:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "280:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "259:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "264:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "255:3:4"
},
"nodeType": "YulFunctionCall",
"src": "255:16:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "273:3:4"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "252:2:4"
},
"nodeType": "YulFunctionCall",
"src": "252:25:4"
},
"nodeType": "YulIf",
"src": "249:2:4"
},
{
"expression": {
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "327:3:4"
},
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "332:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "337:6:4"
}
],
"functionName": {
"name": "copy_calldata_to_memory",
"nodeType": "YulIdentifier",
"src": "303:23:4"
},
"nodeType": "YulFunctionCall",
"src": "303:41:4"
},
"nodeType": "YulExpressionStatement",
"src": "303:41:4"
}
]
},
"name": "abi_decode_available_length_t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "63:3:4",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "68:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "76:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "84:5:4",
"type": ""
}
],
"src": "7:343:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "408:87:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "418:29:4",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "440:6:4"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "427:12:4"
},
"nodeType": "YulFunctionCall",
"src": "427:20:4"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "418:5:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "483:5:4"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "456:26:4"
},
"nodeType": "YulFunctionCall",
"src": "456:33:4"
},
"nodeType": "YulExpressionStatement",
"src": "456:33:4"
}
]
},
"name": "abi_decode_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "386:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "394:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "402:5:4",
"type": ""
}
],
"src": "356:139:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "575:210:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "624:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "633:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "636:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "626:6:4"
},
"nodeType": "YulFunctionCall",
"src": "626:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "626:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "603:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "611:4:4",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "599:3:4"
},
"nodeType": "YulFunctionCall",
"src": "599:17:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "618:3:4"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "595:3:4"
},
"nodeType": "YulFunctionCall",
"src": "595:27:4"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "588:6:4"
},
"nodeType": "YulFunctionCall",
"src": "588:35:4"
},
"nodeType": "YulIf",
"src": "585:2:4"
},
{
"nodeType": "YulVariableDeclaration",
"src": "649:34:4",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "676:6:4"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "663:12:4"
},
"nodeType": "YulFunctionCall",
"src": "663:20:4"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "653:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "692:87:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "752:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "760:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "748:3:4"
},
"nodeType": "YulFunctionCall",
"src": "748:17:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "767:6:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "775:3:4"
}
],
"functionName": {
"name": "abi_decode_available_length_t_bytes_memory_ptr",
"nodeType": "YulIdentifier",
"src": "701:46:4"
},
"nodeType": "YulFunctionCall",
"src": "701:78:4"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "692:5:4"
}
]
}
]
},
"name": "abi_decode_t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "553:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "561:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "569:5:4",
"type": ""
}
],
"src": "514:271:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "843:87:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "853:29:4",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "875:6:4"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "862:12:4"
},
"nodeType": "YulFunctionCall",
"src": "862:20:4"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "853:5:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "918:5:4"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nodeType": "YulIdentifier",
"src": "891:26:4"
},
"nodeType": "YulFunctionCall",
"src": "891:33:4"
},
"nodeType": "YulExpressionStatement",
"src": "891:33:4"
}
]
},
"name": "abi_decode_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "821:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "829:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "837:5:4",
"type": ""
}
],
"src": "791:139:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1062:683:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1109:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1118:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1121:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1111:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1111:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "1111:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1083:7:4"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1092:9:4"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1079:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1079:23:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1104:3:4",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1075:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1075:33:4"
},
"nodeType": "YulIf",
"src": "1072:2:4"
},
{
"nodeType": "YulBlock",
"src": "1135:117:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1150:15:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1164:1:4",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1154:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1179:63:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1214:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1225:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1210:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1210:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1234:7:4"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "1189:20:4"
},
"nodeType": "YulFunctionCall",
"src": "1189:53:4"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1179:6:4"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "1262:118:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1277:16:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1291:2:4",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1281:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1307:63:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1342:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1353:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1338:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1338:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1362:7:4"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "1317:20:4"
},
"nodeType": "YulFunctionCall",
"src": "1317:53:4"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1307:6:4"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "1390:118:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1405:16:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1419:2:4",
"type": "",
"value": "64"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1409:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1435:63:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1470:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1481:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1466:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1466:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1490:7:4"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "1445:20:4"
},
"nodeType": "YulFunctionCall",
"src": "1445:53:4"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1435:6:4"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "1518:220:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1533:46:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1564:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1575:2:4",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1560:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1560:18:4"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1547:12:4"
},
"nodeType": "YulFunctionCall",
"src": "1547:32:4"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1537:6:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1626:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1635:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1638:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1628:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1628:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "1628:12:4"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1598:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1606:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "1595:2:4"
},
"nodeType": "YulFunctionCall",
"src": "1595:30:4"
},
"nodeType": "YulIf",
"src": "1592:2:4"
},
{
"nodeType": "YulAssignment",
"src": "1656:72:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1700:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1711:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1696:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1696:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1720:7:4"
}
],
"functionName": {
"name": "abi_decode_t_bytes_memory_ptr",
"nodeType": "YulIdentifier",
"src": "1666:29:4"
},
"nodeType": "YulFunctionCall",
"src": "1666:62:4"
},
"variableNames": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "1656:6:4"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1008:9:4",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1019:7:4",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1031:6:4",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1039:6:4",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "1047:6:4",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "1055:6:4",
"type": ""
}
],
"src": "936:809:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1814:52:4",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1831:3:4"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1853:5:4"
}
],
"functionName": {
"name": "cleanup_t_bytes4",
"nodeType": "YulIdentifier",
"src": "1836:16:4"
},
"nodeType": "YulFunctionCall",
"src": "1836:23:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1824:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1824:36:4"
},
"nodeType": "YulExpressionStatement",
"src": "1824:36:4"
}
]
},
"name": "abi_encode_t_bytes4_to_t_bytes4_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1802:5:4",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "1809:3:4",
"type": ""
}
],
"src": "1751:115:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1968:122:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1978:26:4",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1990:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2001:2:4",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1986:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1986:18:4"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "1978:4:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2056:6:4"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2069:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2080:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2065:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2065:17:4"
}
],
"functionName": {
"name": "abi_encode_t_bytes4_to_t_bytes4_fromStack",
"nodeType": "YulIdentifier",
"src": "2014:41:4"
},
"nodeType": "YulFunctionCall",
"src": "2014:69:4"
},
"nodeType": "YulExpressionStatement",
"src": "2014:69:4"
}
]
},
"name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1940:9:4",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1952:6:4",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "1963:4:4",
"type": ""
}
],
"src": "1872:218:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2137:88:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2147:30:4",
"value": {
"arguments": [],
"functionName": {
"name": "allocate_unbounded",
"nodeType": "YulIdentifier",
"src": "2157:18:4"
},
"nodeType": "YulFunctionCall",
"src": "2157:20:4"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "2147:6:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "2206:6:4"
},
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "2214:4:4"
}
],
"functionName": {
"name": "finalize_allocation",
"nodeType": "YulIdentifier",
"src": "2186:19:4"
},
"nodeType": "YulFunctionCall",
"src": "2186:33:4"
},
"nodeType": "YulExpressionStatement",
"src": "2186:33:4"
}
]
},
"name": "allocate_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "2121:4:4",
"type": ""
}
],
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "2130:6:4",
"type": ""
}
],
"src": "2096:129:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2271:35:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2281:19:4",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2297:2:4",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2291:5:4"
},
"nodeType": "YulFunctionCall",
"src": "2291:9:4"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "2281:6:4"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "2264:6:4",
"type": ""
}
],
"src": "2231:75:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2378:241:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2483:22:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "2485:16:4"
},
"nodeType": "YulFunctionCall",
"src": "2485:18:4"
},
"nodeType": "YulExpressionStatement",
"src": "2485:18:4"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2455:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2463:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2452:2:4"
},
"nodeType": "YulFunctionCall",
"src": "2452:30:4"
},
"nodeType": "YulIf",
"src": "2449:2:4"
},
{
"nodeType": "YulAssignment",
"src": "2515:37:4",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2545:6:4"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "2523:21:4"
},
"nodeType": "YulFunctionCall",
"src": "2523:29:4"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "2515:4:4"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2589:23:4",
"value": {
"arguments": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "2601:4:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2607:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2597:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2597:15:4"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "2589:4:4"
}
]
}
]
},
"name": "array_allocation_size_t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "2362:6:4",
"type": ""
}
],
"returnVariables": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "2373:4:4",
"type": ""
}
],
"src": "2312:307:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2670:51:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2680:35:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2709:5:4"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nodeType": "YulIdentifier",
"src": "2691:17:4"
},
"nodeType": "YulFunctionCall",
"src": "2691:24:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "2680:7:4"
}
]
}
]
},
"name": "cleanup_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2652:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "2662:7:4",
"type": ""
}
],
"src": "2625:96:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2771:105:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2781:89:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2796:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2803:66:4",
"type": "",
"value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "2792:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2792:78:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "2781:7:4"
}
]
}
]
},
"name": "cleanup_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2753:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "2763:7:4",
"type": ""
}
],
"src": "2727:149:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2927:81:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2937:65:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2952:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2959:42:4",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "2948:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2948:54:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "2937:7:4"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2909:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "2919:7:4",
"type": ""
}
],
"src": "2882:126:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3059:32:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3069:16:4",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "3080:5:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "3069:7:4"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3041:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "3051:7:4",
"type": ""
}
],
"src": "3014:77:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3148:103:4",
"statements": [
{
"expression": {
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "3171:3:4"
},
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "3176:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3181:6:4"
}
],
"functionName": {
"name": "calldatacopy",
"nodeType": "YulIdentifier",
"src": "3158:12:4"
},
"nodeType": "YulFunctionCall",
"src": "3158:30:4"
},
"nodeType": "YulExpressionStatement",
"src": "3158:30:4"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "3229:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3234:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3225:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3225:16:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3243:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3218:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3218:27:4"
},
"nodeType": "YulExpressionStatement",
"src": "3218:27:4"
}
]
},
"name": "copy_calldata_to_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "3130:3:4",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "3135:3:4",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3140:6:4",
"type": ""
}
],
"src": "3097:154:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3300:238:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3310:58:4",
"value": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "3332:6:4"
},
{
"arguments": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "3362:4:4"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "3340:21:4"
},
"nodeType": "YulFunctionCall",
"src": "3340:27:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3328:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3328:40:4"
},
"variables": [
{
"name": "newFreePtr",
"nodeType": "YulTypedName",
"src": "3314:10:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3479:22:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "3481:16:4"
},
"nodeType": "YulFunctionCall",
"src": "3481:18:4"
},
"nodeType": "YulExpressionStatement",
"src": "3481:18:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "3422:10:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3434:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "3419:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3419:34:4"
},
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "3458:10:4"
},
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "3470:6:4"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "3455:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3455:22:4"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "3416:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3416:62:4"
},
"nodeType": "YulIf",
"src": "3413:2:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3517:2:4",
"type": "",
"value": "64"
},
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "3521:10:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3510:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3510:22:4"
},
"nodeType": "YulExpressionStatement",
"src": "3510:22:4"
}
]
},
"name": "finalize_allocation",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "3286:6:4",
"type": ""
},
{
"name": "size",
"nodeType": "YulTypedName",
"src": "3294:4:4",
"type": ""
}
],
"src": "3257:281:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3572:152:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3589:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3592:77:4",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3582:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3582:88:4"
},
"nodeType": "YulExpressionStatement",
"src": "3582:88:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3686:1:4",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3689:4:4",
"type": "",
"value": "0x41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3679:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3679:15:4"
},
"nodeType": "YulExpressionStatement",
"src": "3679:15:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3710:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3713:4:4",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3703:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3703:15:4"
},
"nodeType": "YulExpressionStatement",
"src": "3703:15:4"
}
]
},
"name": "panic_error_0x41",
"nodeType": "YulFunctionDefinition",
"src": "3544:180:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3778:54:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3788:38:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3806:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3813:2:4",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3802:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3802:14:4"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3822:2:4",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "3818:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3818:7:4"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3798:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3798:28:4"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "3788:6:4"
}
]
}
]
},
"name": "round_up_to_mul_of_32",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3761:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "3771:6:4",
"type": ""
}
],
"src": "3730:102:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3881:79:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "3938:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3947:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3950:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3940:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3940:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "3940:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3904:5:4"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3929:5:4"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "3911:17:4"
},
"nodeType": "YulFunctionCall",
"src": "3911:24:4"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "3901:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3901:35:4"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "3894:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3894:43:4"
},
"nodeType": "YulIf",
"src": "3891:2:4"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3874:5:4",
"type": ""
}
],
"src": "3838:122:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4009:79:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "4066:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4075:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4078:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4068:6:4"
},
"nodeType": "YulFunctionCall",
"src": "4068:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "4068:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4032:5:4"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4057:5:4"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "4039:17:4"
},
"nodeType": "YulFunctionCall",
"src": "4039:24:4"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "4029:2:4"
},
"nodeType": "YulFunctionCall",
"src": "4029:35:4"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "4022:6:4"
},
"nodeType": "YulFunctionCall",
"src": "4022:43:4"
},
"nodeType": "YulIf",
"src": "4019:2:4"
}
]
},
"name": "validator_revert_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4002:5:4",
"type": ""
}
],
"src": "3966:122:4"
}
]
},
"contents": "{\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert(0, 0) }\n copy_calldata_to_memory(src, dst, length)\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_bytes4_to_t_bytes4_fromStack(value, pos) {\n mstore(pos, cleanup_t_bytes4(value))\n }\n\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bytes4_to_t_bytes4_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_bytes4(value) -> cleaned {\n cleaned := and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n",
"id": 4,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61004a60048036038101906100459190610106565b610060565b6040516100579190610190565b60405180910390f35b600063150b7a0260e01b9050949350505050565b6000610087610082846101d0565b6101ab565b90508281526020810184848401111561009f57600080fd5b6100aa848285610269565b509392505050565b6000813590506100c1816102e9565b92915050565b600082601f8301126100d857600080fd5b81356100e8848260208601610074565b91505092915050565b60008135905061010081610300565b92915050565b6000806000806080858703121561011c57600080fd5b600061012a878288016100b2565b945050602061013b878288016100b2565b935050604061014c878288016100f1565b925050606085013567ffffffffffffffff81111561016957600080fd5b610175878288016100c7565b91505092959194509250565b61018a81610213565b82525050565b60006020820190506101a56000830184610181565b92915050565b60006101b56101c6565b90506101c18282610278565b919050565b6000604051905090565b600067ffffffffffffffff8211156101eb576101ea6102a9565b5b6101f4826102d8565b9050602081019050919050565b600061020c8261023f565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b610281826102d8565b810181811067ffffffffffffffff821117156102a05761029f6102a9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6102f281610201565b81146102fd57600080fd5b50565b6103098161025f565b811461031457600080fd5b5056fea2646970667358221220cc98a2abed81e1492dd64fbea2da837f4ffcc94d267efa7c3a3e7d19d4100c8764736f6c63430008040033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x190 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH4 0x150B7A02 PUSH1 0xE0 SHL SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x87 PUSH2 0x82 DUP5 PUSH2 0x1D0 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAA DUP5 DUP3 DUP6 PUSH2 0x269 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC1 DUP2 PUSH2 0x2E9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE8 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x74 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x100 DUP2 PUSH2 0x300 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x12A DUP8 DUP3 DUP9 ADD PUSH2 0xB2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x13B DUP8 DUP3 DUP9 ADD PUSH2 0xB2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x14C DUP8 DUP3 DUP9 ADD PUSH2 0xF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x175 DUP8 DUP3 DUP9 ADD PUSH2 0xC7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x18A DUP2 PUSH2 0x213 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1A5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x181 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B5 PUSH2 0x1C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1C1 DUP3 DUP3 PUSH2 0x278 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1EB JUMPI PUSH2 0x1EA PUSH2 0x2A9 JUMP JUMPDEST JUMPDEST PUSH2 0x1F4 DUP3 PUSH2 0x2D8 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20C DUP3 PUSH2 0x23F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH2 0x281 DUP3 PUSH2 0x2D8 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2A0 JUMPI PUSH2 0x29F PUSH2 0x2A9 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2F2 DUP2 PUSH2 0x201 JUMP JUMPDEST DUP2 EQ PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x309 DUP2 PUSH2 0x25F JUMP JUMPDEST DUP2 EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC SWAP9 LOG2 0xAB 0xED DUP2 0xE1 0x49 0x2D 0xD6 0x4F 0xBE LOG2 0xDA DUP4 PUSH32 0x4FFCC94D267EFA7C3A3E7D19D4100C8764736F6C634300080400330000000000 ",
"sourceMap": "466:639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;872:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;1010:6;1035:30;;;1028:37;;872:200;;;;;;:::o;7:343:4:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;514:271::-;569:5;618:3;611:4;603:6;599:17;595:27;585:2;;636:1;633;626:12;585:2;676:6;663:20;701:78;775:3;767:6;760:4;752:6;748:17;701:78;:::i;:::-;692:87;;575:210;;;;;:::o;791:139::-;837:5;875:6;862:20;853:29;;891:33;918:5;891:33;:::i;:::-;843:87;;;;:::o;936:809::-;1031:6;1039;1047;1055;1104:3;1092:9;1083:7;1079:23;1075:33;1072:2;;;1121:1;1118;1111:12;1072:2;1164:1;1189:53;1234:7;1225:6;1214:9;1210:22;1189:53;:::i;:::-;1179:63;;1135:117;1291:2;1317:53;1362:7;1353:6;1342:9;1338:22;1317:53;:::i;:::-;1307:63;;1262:118;1419:2;1445:53;1490:7;1481:6;1470:9;1466:22;1445:53;:::i;:::-;1435:63;;1390:118;1575:2;1564:9;1560:18;1547:32;1606:18;1598:6;1595:30;1592:2;;;1638:1;1635;1628:12;1592:2;1666:62;1720:7;1711:6;1700:9;1696:22;1666:62;:::i;:::-;1656:72;;1518:220;1062:683;;;;;;;:::o;1751:115::-;1836:23;1853:5;1836:23;:::i;:::-;1831:3;1824:36;1814:52;;:::o;1872:218::-;1963:4;2001:2;1990:9;1986:18;1978:26;;2014:69;2080:1;2069:9;2065:17;2056:6;2014:69;:::i;:::-;1968:122;;;;:::o;2096:129::-;2130:6;2157:20;;:::i;:::-;2147:30;;2186:33;2214:4;2206:6;2186:33;:::i;:::-;2137:88;;;:::o;2231:75::-;2264:6;2297:2;2291:9;2281:19;;2271:35;:::o;2312:307::-;2373:4;2463:18;2455:6;2452:30;2449:2;;;2485:18;;:::i;:::-;2449:2;2523:29;2545:6;2523:29;:::i;:::-;2515:37;;2607:4;2601;2597:15;2589:23;;2378:241;;;:::o;2625:96::-;2662:7;2691:24;2709:5;2691:24;:::i;:::-;2680:35;;2670:51;;;:::o;2727:149::-;2763:7;2803:66;2796:5;2792:78;2781:89;;2771:105;;;:::o;2882:126::-;2919:7;2959:42;2952:5;2948:54;2937:65;;2927:81;;;:::o;3014:77::-;3051:7;3080:5;3069:16;;3059:32;;;:::o;3097:154::-;3181:6;3176:3;3171;3158:30;3243:1;3234:6;3229:3;3225:16;3218:27;3148:103;;;:::o;3257:281::-;3340:27;3362:4;3340:27;:::i;:::-;3332:6;3328:40;3470:6;3458:10;3455:22;3434:18;3422:10;3419:34;3416:62;3413:2;;;3481:18;;:::i;:::-;3413:2;3521:10;3517:2;3510:22;3300:238;;;:::o;3544:180::-;3592:77;3589:1;3582:88;3689:4;3686:1;3679:15;3713:4;3710:1;3703:15;3730:102;3771:6;3822:2;3818:7;3813:2;3806:5;3802:14;3798:28;3788:38;;3778:54;;;:::o;3838:122::-;3911:24;3929:5;3911:24;:::i;:::-;3904:5;3901:35;3891:2;;3950:1;3947;3940:12;3891:2;3881:79;:::o;3966:122::-;4039:24;4057:5;4039:24;:::i;:::-;4032:5;4029:35;4019:2;;4078:1;4075;4068:12;4019:2;4009:79;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "169000",
"executionCost": "214",
"totalCost": "169214"
},
"external": {
"onERC721Received(address,address,uint256,bytes)": "infinite"
},
"internal": {
"__ERC721Holder_init()": "infinite",
"__ERC721Holder_init_unchained()": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "80"
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 466,
"end": 1105,
"name": "MSTORE",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "CALLVALUE",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "DUP1",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "ISZERO",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH [tag]",
"source": 0,
"value": "1"
},
{
"begin": 466,
"end": 1105,
"name": "JUMPI",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 466,
"end": 1105,
"name": "DUP1",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "REVERT",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "tag",
"source": 0,
"value": "1"
},
{
"begin": 466,
"end": 1105,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "POP",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 466,
"end": 1105,
"name": "DUP1",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 466,
"end": 1105,
"name": "CODECOPY",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 466,
"end": 1105,
"name": "RETURN",
"source": 0
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220cc98a2abed81e1492dd64fbea2da837f4ffcc94d267efa7c3a3e7d19d4100c8764736f6c63430008040033",
".code": [
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "80"
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 466,
"end": 1105,
"name": "MSTORE",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "CALLVALUE",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "DUP1",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "ISZERO",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH [tag]",
"source": 0,
"value": "1"
},
{
"begin": 466,
"end": 1105,
"name": "JUMPI",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 466,
"end": 1105,
"name": "DUP1",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "REVERT",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "tag",
"source": 0,
"value": "1"
},
{
"begin": 466,
"end": 1105,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "POP",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 466,
"end": 1105,
"name": "CALLDATASIZE",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "LT",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH [tag]",
"source": 0,
"value": "2"
},
{
"begin": 466,
"end": 1105,
"name": "JUMPI",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 466,
"end": 1105,
"name": "CALLDATALOAD",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "E0"
},
{
"begin": 466,
"end": 1105,
"name": "SHR",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "DUP1",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "150B7A02"
},
{
"begin": 466,
"end": 1105,
"name": "EQ",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH [tag]",
"source": 0,
"value": "3"
},
{
"begin": 466,
"end": 1105,
"name": "JUMPI",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "tag",
"source": 0,
"value": "2"
},
{
"begin": 466,
"end": 1105,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 466,
"end": 1105,
"name": "DUP1",
"source": 0
},
{
"begin": 466,
"end": 1105,
"name": "REVERT",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "tag",
"source": 0,
"value": "3"
},
{
"begin": 872,
"end": 1072,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "PUSH [tag]",
"source": 0,
"value": "4"
},
{
"begin": 872,
"end": 1072,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 872,
"end": 1072,
"name": "DUP1",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "CALLDATASIZE",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SUB",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "DUP2",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "ADD",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SWAP1",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "PUSH [tag]",
"source": 0,
"value": "5"
},
{
"begin": 872,
"end": 1072,
"name": "SWAP2",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SWAP1",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "PUSH [tag]",
"source": 0,
"value": "6"
},
{
"begin": 872,
"end": 1072,
"name": "JUMP",
"source": 0,
"value": "[in]"
},
{
"begin": 872,
"end": 1072,
"name": "tag",
"source": 0,
"value": "5"
},
{
"begin": 872,
"end": 1072,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "PUSH [tag]",
"source": 0,
"value": "7"
},
{
"begin": 872,
"end": 1072,
"name": "JUMP",
"source": 0,
"value": "[in]"
},
{
"begin": 872,
"end": 1072,
"name": "tag",
"source": 0,
"value": "4"
},
{
"begin": 872,
"end": 1072,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 872,
"end": 1072,
"name": "MLOAD",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "PUSH [tag]",
"source": 0,
"value": "8"
},
{
"begin": 872,
"end": 1072,
"name": "SWAP2",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SWAP1",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "PUSH [tag]",
"source": 0,
"value": "9"
},
{
"begin": 872,
"end": 1072,
"name": "JUMP",
"source": 0,
"value": "[in]"
},
{
"begin": 872,
"end": 1072,
"name": "tag",
"source": 0,
"value": "8"
},
{
"begin": 872,
"end": 1072,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 872,
"end": 1072,
"name": "MLOAD",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "DUP1",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SWAP2",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SUB",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SWAP1",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "RETURN",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "tag",
"source": 0,
"value": "7"
},
{
"begin": 872,
"end": 1072,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 1010,
"end": 1016,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 1035,
"end": 1065,
"name": "PUSH",
"source": 0,
"value": "150B7A02"
},
{
"begin": 1035,
"end": 1065,
"name": "PUSH",
"source": 0,
"value": "E0"
},
{
"begin": 1035,
"end": 1065,
"name": "SHL",
"source": 0
},
{
"begin": 1028,
"end": 1065,
"name": "SWAP1",
"source": 0
},
{
"begin": 1028,
"end": 1065,
"name": "POP",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SWAP5",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "SWAP4",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "POP",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "POP",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "POP",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "POP",
"source": 0
},
{
"begin": 872,
"end": 1072,
"name": "JUMP",
"source": 0,
"value": "[out]"
},
{
"begin": 7,
"end": 350,
"name": "tag",
"source": 4,
"value": "12"
},
{
"begin": 7,
"end": 350,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 84,
"end": 89,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 109,
"end": 174,
"name": "PUSH [tag]",
"source": 4,
"value": "14"
},
{
"begin": 125,
"end": 173,
"name": "PUSH [tag]",
"source": 4,
"value": "15"
},
{
"begin": 166,
"end": 172,
"name": "DUP5",
"source": 4
},
{
"begin": 125,
"end": 173,
"name": "PUSH [tag]",
"source": 4,
"value": "16"
},
{
"begin": 125,
"end": 173,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 125,
"end": 173,
"name": "tag",
"source": 4,
"value": "15"
},
{
"begin": 125,
"end": 173,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 109,
"end": 174,
"name": "PUSH [tag]",
"source": 4,
"value": "17"
},
{
"begin": 109,
"end": 174,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 109,
"end": 174,
"name": "tag",
"source": 4,
"value": "14"
},
{
"begin": 109,
"end": 174,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 100,
"end": 174,
"name": "SWAP1",
"source": 4
},
{
"begin": 100,
"end": 174,
"name": "POP",
"source": 4
},
{
"begin": 197,
"end": 203,
"name": "DUP3",
"source": 4
},
{
"begin": 190,
"end": 195,
"name": "DUP2",
"source": 4
},
{
"begin": 183,
"end": 204,
"name": "MSTORE",
"source": 4
},
{
"begin": 235,
"end": 239,
"name": "PUSH",
"source": 4,
"value": "20"
},
{
"begin": 228,
"end": 233,
"name": "DUP2",
"source": 4
},
{
"begin": 224,
"end": 240,
"name": "ADD",
"source": 4
},
{
"begin": 273,
"end": 276,
"name": "DUP5",
"source": 4
},
{
"begin": 264,
"end": 270,
"name": "DUP5",
"source": 4
},
{
"begin": 259,
"end": 262,
"name": "DUP5",
"source": 4
},
{
"begin": 255,
"end": 271,
"name": "ADD",
"source": 4
},
{
"begin": 252,
"end": 277,
"name": "GT",
"source": 4
},
{
"begin": 249,
"end": 251,
"name": "ISZERO",
"source": 4
},
{
"begin": 249,
"end": 251,
"name": "PUSH [tag]",
"source": 4,
"value": "18"
},
{
"begin": 249,
"end": 251,
"name": "JUMPI",
"source": 4
},
{
"begin": 290,
"end": 291,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 287,
"end": 288,
"name": "DUP1",
"source": 4
},
{
"begin": 280,
"end": 292,
"name": "REVERT",
"source": 4
},
{
"begin": 249,
"end": 251,
"name": "tag",
"source": 4,
"value": "18"
},
{
"begin": 249,
"end": 251,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 303,
"end": 344,
"name": "PUSH [tag]",
"source": 4,
"value": "19"
},
{
"begin": 337,
"end": 343,
"name": "DUP5",
"source": 4
},
{
"begin": 332,
"end": 335,
"name": "DUP3",
"source": 4
},
{
"begin": 327,
"end": 330,
"name": "DUP6",
"source": 4
},
{
"begin": 303,
"end": 344,
"name": "PUSH [tag]",
"source": 4,
"value": "20"
},
{
"begin": 303,
"end": 344,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 303,
"end": 344,
"name": "tag",
"source": 4,
"value": "19"
},
{
"begin": 303,
"end": 344,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 90,
"end": 350,
"name": "POP",
"source": 4
},
{
"begin": 90,
"end": 350,
"name": "SWAP4",
"source": 4
},
{
"begin": 90,
"end": 350,
"name": "SWAP3",
"source": 4
},
{
"begin": 90,
"end": 350,
"name": "POP",
"source": 4
},
{
"begin": 90,
"end": 350,
"name": "POP",
"source": 4
},
{
"begin": 90,
"end": 350,
"name": "POP",
"source": 4
},
{
"begin": 90,
"end": 350,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 356,
"end": 495,
"name": "tag",
"source": 4,
"value": "21"
},
{
"begin": 356,
"end": 495,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 402,
"end": 407,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 440,
"end": 446,
"name": "DUP2",
"source": 4
},
{
"begin": 427,
"end": 447,
"name": "CALLDATALOAD",
"source": 4
},
{
"begin": 418,
"end": 447,
"name": "SWAP1",
"source": 4
},
{
"begin": 418,
"end": 447,
"name": "POP",
"source": 4
},
{
"begin": 456,
"end": 489,
"name": "PUSH [tag]",
"source": 4,
"value": "23"
},
{
"begin": 483,
"end": 488,
"name": "DUP2",
"source": 4
},
{
"begin": 456,
"end": 489,
"name": "PUSH [tag]",
"source": 4,
"value": "24"
},
{
"begin": 456,
"end": 489,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 456,
"end": 489,
"name": "tag",
"source": 4,
"value": "23"
},
{
"begin": 456,
"end": 489,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 408,
"end": 495,
"name": "SWAP3",
"source": 4
},
{
"begin": 408,
"end": 495,
"name": "SWAP2",
"source": 4
},
{
"begin": 408,
"end": 495,
"name": "POP",
"source": 4
},
{
"begin": 408,
"end": 495,
"name": "POP",
"source": 4
},
{
"begin": 408,
"end": 495,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 514,
"end": 785,
"name": "tag",
"source": 4,
"value": "25"
},
{
"begin": 514,
"end": 785,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 569,
"end": 574,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 618,
"end": 621,
"name": "DUP3",
"source": 4
},
{
"begin": 611,
"end": 615,
"name": "PUSH",
"source": 4,
"value": "1F"
},
{
"begin": 603,
"end": 609,
"name": "DUP4",
"source": 4
},
{
"begin": 599,
"end": 616,
"name": "ADD",
"source": 4
},
{
"begin": 595,
"end": 622,
"name": "SLT",
"source": 4
},
{
"begin": 585,
"end": 587,
"name": "PUSH [tag]",
"source": 4,
"value": "27"
},
{
"begin": 585,
"end": 587,
"name": "JUMPI",
"source": 4
},
{
"begin": 636,
"end": 637,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 633,
"end": 634,
"name": "DUP1",
"source": 4
},
{
"begin": 626,
"end": 638,
"name": "REVERT",
"source": 4
},
{
"begin": 585,
"end": 587,
"name": "tag",
"source": 4,
"value": "27"
},
{
"begin": 585,
"end": 587,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 676,
"end": 682,
"name": "DUP2",
"source": 4
},
{
"begin": 663,
"end": 683,
"name": "CALLDATALOAD",
"source": 4
},
{
"begin": 701,
"end": 779,
"name": "PUSH [tag]",
"source": 4,
"value": "28"
},
{
"begin": 775,
"end": 778,
"name": "DUP5",
"source": 4
},
{
"begin": 767,
"end": 773,
"name": "DUP3",
"source": 4
},
{
"begin": 760,
"end": 764,
"name": "PUSH",
"source": 4,
"value": "20"
},
{
"begin": 752,
"end": 758,
"name": "DUP7",
"source": 4
},
{
"begin": 748,
"end": 765,
"name": "ADD",
"source": 4
},
{
"begin": 701,
"end": 779,
"name": "PUSH [tag]",
"source": 4,
"value": "12"
},
{
"begin": 701,
"end": 779,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 701,
"end": 779,
"name": "tag",
"source": 4,
"value": "28"
},
{
"begin": 701,
"end": 779,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 692,
"end": 779,
"name": "SWAP2",
"source": 4
},
{
"begin": 692,
"end": 779,
"name": "POP",
"source": 4
},
{
"begin": 575,
"end": 785,
"name": "POP",
"source": 4
},
{
"begin": 575,
"end": 785,
"name": "SWAP3",
"source": 4
},
{
"begin": 575,
"end": 785,
"name": "SWAP2",
"source": 4
},
{
"begin": 575,
"end": 785,
"name": "POP",
"source": 4
},
{
"begin": 575,
"end": 785,
"name": "POP",
"source": 4
},
{
"begin": 575,
"end": 785,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 791,
"end": 930,
"name": "tag",
"source": 4,
"value": "29"
},
{
"begin": 791,
"end": 930,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 837,
"end": 842,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 875,
"end": 881,
"name": "DUP2",
"source": 4
},
{
"begin": 862,
"end": 882,
"name": "CALLDATALOAD",
"source": 4
},
{
"begin": 853,
"end": 882,
"name": "SWAP1",
"source": 4
},
{
"begin": 853,
"end": 882,
"name": "POP",
"source": 4
},
{
"begin": 891,
"end": 924,
"name": "PUSH [tag]",
"source": 4,
"value": "31"
},
{
"begin": 918,
"end": 923,
"name": "DUP2",
"source": 4
},
{
"begin": 891,
"end": 924,
"name": "PUSH [tag]",
"source": 4,
"value": "32"
},
{
"begin": 891,
"end": 924,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 891,
"end": 924,
"name": "tag",
"source": 4,
"value": "31"
},
{
"begin": 891,
"end": 924,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 843,
"end": 930,
"name": "SWAP3",
"source": 4
},
{
"begin": 843,
"end": 930,
"name": "SWAP2",
"source": 4
},
{
"begin": 843,
"end": 930,
"name": "POP",
"source": 4
},
{
"begin": 843,
"end": 930,
"name": "POP",
"source": 4
},
{
"begin": 843,
"end": 930,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 936,
"end": 1745,
"name": "tag",
"source": 4,
"value": "6"
},
{
"begin": 936,
"end": 1745,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1031,
"end": 1037,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 1039,
"end": 1045,
"name": "DUP1",
"source": 4
},
{
"begin": 1047,
"end": 1053,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 1055,
"end": 1061,
"name": "DUP1",
"source": 4
},
{
"begin": 1104,
"end": 1107,
"name": "PUSH",
"source": 4,
"value": "80"
},
{
"begin": 1092,
"end": 1101,
"name": "DUP6",
"source": 4
},
{
"begin": 1083,
"end": 1090,
"name": "DUP8",
"source": 4
},
{
"begin": 1079,
"end": 1102,
"name": "SUB",
"source": 4
},
{
"begin": 1075,
"end": 1108,
"name": "SLT",
"source": 4
},
{
"begin": 1072,
"end": 1074,
"name": "ISZERO",
"source": 4
},
{
"begin": 1072,
"end": 1074,
"name": "PUSH [tag]",
"source": 4,
"value": "34"
},
{
"begin": 1072,
"end": 1074,
"name": "JUMPI",
"source": 4
},
{
"begin": 1121,
"end": 1122,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 1118,
"end": 1119,
"name": "DUP1",
"source": 4
},
{
"begin": 1111,
"end": 1123,
"name": "REVERT",
"source": 4
},
{
"begin": 1072,
"end": 1074,
"name": "tag",
"source": 4,
"value": "34"
},
{
"begin": 1072,
"end": 1074,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1164,
"end": 1165,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 1189,
"end": 1242,
"name": "PUSH [tag]",
"source": 4,
"value": "35"
},
{
"begin": 1234,
"end": 1241,
"name": "DUP8",
"source": 4
},
{
"begin": 1225,
"end": 1231,
"name": "DUP3",
"source": 4
},
{
"begin": 1214,
"end": 1223,
"name": "DUP9",
"source": 4
},
{
"begin": 1210,
"end": 1232,
"name": "ADD",
"source": 4
},
{
"begin": 1189,
"end": 1242,
"name": "PUSH [tag]",
"source": 4,
"value": "21"
},
{
"begin": 1189,
"end": 1242,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 1189,
"end": 1242,
"name": "tag",
"source": 4,
"value": "35"
},
{
"begin": 1189,
"end": 1242,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1179,
"end": 1242,
"name": "SWAP5",
"source": 4
},
{
"begin": 1179,
"end": 1242,
"name": "POP",
"source": 4
},
{
"begin": 1135,
"end": 1252,
"name": "POP",
"source": 4
},
{
"begin": 1291,
"end": 1293,
"name": "PUSH",
"source": 4,
"value": "20"
},
{
"begin": 1317,
"end": 1370,
"name": "PUSH [tag]",
"source": 4,
"value": "36"
},
{
"begin": 1362,
"end": 1369,
"name": "DUP8",
"source": 4
},
{
"begin": 1353,
"end": 1359,
"name": "DUP3",
"source": 4
},
{
"begin": 1342,
"end": 1351,
"name": "DUP9",
"source": 4
},
{
"begin": 1338,
"end": 1360,
"name": "ADD",
"source": 4
},
{
"begin": 1317,
"end": 1370,
"name": "PUSH [tag]",
"source": 4,
"value": "21"
},
{
"begin": 1317,
"end": 1370,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 1317,
"end": 1370,
"name": "tag",
"source": 4,
"value": "36"
},
{
"begin": 1317,
"end": 1370,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1307,
"end": 1370,
"name": "SWAP4",
"source": 4
},
{
"begin": 1307,
"end": 1370,
"name": "POP",
"source": 4
},
{
"begin": 1262,
"end": 1380,
"name": "POP",
"source": 4
},
{
"begin": 1419,
"end": 1421,
"name": "PUSH",
"source": 4,
"value": "40"
},
{
"begin": 1445,
"end": 1498,
"name": "PUSH [tag]",
"source": 4,
"value": "37"
},
{
"begin": 1490,
"end": 1497,
"name": "DUP8",
"source": 4
},
{
"begin": 1481,
"end": 1487,
"name": "DUP3",
"source": 4
},
{
"begin": 1470,
"end": 1479,
"name": "DUP9",
"source": 4
},
{
"begin": 1466,
"end": 1488,
"name": "ADD",
"source": 4
},
{
"begin": 1445,
"end": 1498,
"name": "PUSH [tag]",
"source": 4,
"value": "29"
},
{
"begin": 1445,
"end": 1498,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 1445,
"end": 1498,
"name": "tag",
"source": 4,
"value": "37"
},
{
"begin": 1445,
"end": 1498,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1435,
"end": 1498,
"name": "SWAP3",
"source": 4
},
{
"begin": 1435,
"end": 1498,
"name": "POP",
"source": 4
},
{
"begin": 1390,
"end": 1508,
"name": "POP",
"source": 4
},
{
"begin": 1575,
"end": 1577,
"name": "PUSH",
"source": 4,
"value": "60"
},
{
"begin": 1564,
"end": 1573,
"name": "DUP6",
"source": 4
},
{
"begin": 1560,
"end": 1578,
"name": "ADD",
"source": 4
},
{
"begin": 1547,
"end": 1579,
"name": "CALLDATALOAD",
"source": 4
},
{
"begin": 1606,
"end": 1624,
"name": "PUSH",
"source": 4,
"value": "FFFFFFFFFFFFFFFF"
},
{
"begin": 1598,
"end": 1604,
"name": "DUP2",
"source": 4
},
{
"begin": 1595,
"end": 1625,
"name": "GT",
"source": 4
},
{
"begin": 1592,
"end": 1594,
"name": "ISZERO",
"source": 4
},
{
"begin": 1592,
"end": 1594,
"name": "PUSH [tag]",
"source": 4,
"value": "38"
},
{
"begin": 1592,
"end": 1594,
"name": "JUMPI",
"source": 4
},
{
"begin": 1638,
"end": 1639,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 1635,
"end": 1636,
"name": "DUP1",
"source": 4
},
{
"begin": 1628,
"end": 1640,
"name": "REVERT",
"source": 4
},
{
"begin": 1592,
"end": 1594,
"name": "tag",
"source": 4,
"value": "38"
},
{
"begin": 1592,
"end": 1594,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1666,
"end": 1728,
"name": "PUSH [tag]",
"source": 4,
"value": "39"
},
{
"begin": 1720,
"end": 1727,
"name": "DUP8",
"source": 4
},
{
"begin": 1711,
"end": 1717,
"name": "DUP3",
"source": 4
},
{
"begin": 1700,
"end": 1709,
"name": "DUP9",
"source": 4
},
{
"begin": 1696,
"end": 1718,
"name": "ADD",
"source": 4
},
{
"begin": 1666,
"end": 1728,
"name": "PUSH [tag]",
"source": 4,
"value": "25"
},
{
"begin": 1666,
"end": 1728,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 1666,
"end": 1728,
"name": "tag",
"source": 4,
"value": "39"
},
{
"begin": 1666,
"end": 1728,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1656,
"end": 1728,
"name": "SWAP2",
"source": 4
},
{
"begin": 1656,
"end": 1728,
"name": "POP",
"source": 4
},
{
"begin": 1518,
"end": 1738,
"name": "POP",
"source": 4
},
{
"begin": 1062,
"end": 1745,
"name": "SWAP3",
"source": 4
},
{
"begin": 1062,
"end": 1745,
"name": "SWAP6",
"source": 4
},
{
"begin": 1062,
"end": 1745,
"name": "SWAP2",
"source": 4
},
{
"begin": 1062,
"end": 1745,
"name": "SWAP5",
"source": 4
},
{
"begin": 1062,
"end": 1745,
"name": "POP",
"source": 4
},
{
"begin": 1062,
"end": 1745,
"name": "SWAP3",
"source": 4
},
{
"begin": 1062,
"end": 1745,
"name": "POP",
"source": 4
},
{
"begin": 1062,
"end": 1745,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 1751,
"end": 1866,
"name": "tag",
"source": 4,
"value": "40"
},
{
"begin": 1751,
"end": 1866,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1836,
"end": 1859,
"name": "PUSH [tag]",
"source": 4,
"value": "42"
},
{
"begin": 1853,
"end": 1858,
"name": "DUP2",
"source": 4
},
{
"begin": 1836,
"end": 1859,
"name": "PUSH [tag]",
"source": 4,
"value": "43"
},
{
"begin": 1836,
"end": 1859,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 1836,
"end": 1859,
"name": "tag",
"source": 4,
"value": "42"
},
{
"begin": 1836,
"end": 1859,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1831,
"end": 1834,
"name": "DUP3",
"source": 4
},
{
"begin": 1824,
"end": 1860,
"name": "MSTORE",
"source": 4
},
{
"begin": 1814,
"end": 1866,
"name": "POP",
"source": 4
},
{
"begin": 1814,
"end": 1866,
"name": "POP",
"source": 4
},
{
"begin": 1814,
"end": 1866,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 1872,
"end": 2090,
"name": "tag",
"source": 4,
"value": "9"
},
{
"begin": 1872,
"end": 2090,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1963,
"end": 1967,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 2001,
"end": 2003,
"name": "PUSH",
"source": 4,
"value": "20"
},
{
"begin": 1990,
"end": 1999,
"name": "DUP3",
"source": 4
},
{
"begin": 1986,
"end": 2004,
"name": "ADD",
"source": 4
},
{
"begin": 1978,
"end": 2004,
"name": "SWAP1",
"source": 4
},
{
"begin": 1978,
"end": 2004,
"name": "POP",
"source": 4
},
{
"begin": 2014,
"end": 2083,
"name": "PUSH [tag]",
"source": 4,
"value": "45"
},
{
"begin": 2080,
"end": 2081,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 2069,
"end": 2078,
"name": "DUP4",
"source": 4
},
{
"begin": 2065,
"end": 2082,
"name": "ADD",
"source": 4
},
{
"begin": 2056,
"end": 2062,
"name": "DUP5",
"source": 4
},
{
"begin": 2014,
"end": 2083,
"name": "PUSH [tag]",
"source": 4,
"value": "40"
},
{
"begin": 2014,
"end": 2083,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 2014,
"end": 2083,
"name": "tag",
"source": 4,
"value": "45"
},
{
"begin": 2014,
"end": 2083,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 1968,
"end": 2090,
"name": "SWAP3",
"source": 4
},
{
"begin": 1968,
"end": 2090,
"name": "SWAP2",
"source": 4
},
{
"begin": 1968,
"end": 2090,
"name": "POP",
"source": 4
},
{
"begin": 1968,
"end": 2090,
"name": "POP",
"source": 4
},
{
"begin": 1968,
"end": 2090,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 2096,
"end": 2225,
"name": "tag",
"source": 4,
"value": "17"
},
{
"begin": 2096,
"end": 2225,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2130,
"end": 2136,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 2157,
"end": 2177,
"name": "PUSH [tag]",
"source": 4,
"value": "47"
},
{
"begin": 2157,
"end": 2177,
"name": "PUSH [tag]",
"source": 4,
"value": "48"
},
{
"begin": 2157,
"end": 2177,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 2157,
"end": 2177,
"name": "tag",
"source": 4,
"value": "47"
},
{
"begin": 2157,
"end": 2177,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2147,
"end": 2177,
"name": "SWAP1",
"source": 4
},
{
"begin": 2147,
"end": 2177,
"name": "POP",
"source": 4
},
{
"begin": 2186,
"end": 2219,
"name": "PUSH [tag]",
"source": 4,
"value": "49"
},
{
"begin": 2214,
"end": 2218,
"name": "DUP3",
"source": 4
},
{
"begin": 2206,
"end": 2212,
"name": "DUP3",
"source": 4
},
{
"begin": 2186,
"end": 2219,
"name": "PUSH [tag]",
"source": 4,
"value": "50"
},
{
"begin": 2186,
"end": 2219,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 2186,
"end": 2219,
"name": "tag",
"source": 4,
"value": "49"
},
{
"begin": 2186,
"end": 2219,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2137,
"end": 2225,
"name": "SWAP2",
"source": 4
},
{
"begin": 2137,
"end": 2225,
"name": "SWAP1",
"source": 4
},
{
"begin": 2137,
"end": 2225,
"name": "POP",
"source": 4
},
{
"begin": 2137,
"end": 2225,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 2231,
"end": 2306,
"name": "tag",
"source": 4,
"value": "48"
},
{
"begin": 2231,
"end": 2306,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2264,
"end": 2270,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 2297,
"end": 2299,
"name": "PUSH",
"source": 4,
"value": "40"
},
{
"begin": 2291,
"end": 2300,
"name": "MLOAD",
"source": 4
},
{
"begin": 2281,
"end": 2300,
"name": "SWAP1",
"source": 4
},
{
"begin": 2281,
"end": 2300,
"name": "POP",
"source": 4
},
{
"begin": 2271,
"end": 2306,
"name": "SWAP1",
"source": 4
},
{
"begin": 2271,
"end": 2306,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 2312,
"end": 2619,
"name": "tag",
"source": 4,
"value": "16"
},
{
"begin": 2312,
"end": 2619,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2373,
"end": 2377,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 2463,
"end": 2481,
"name": "PUSH",
"source": 4,
"value": "FFFFFFFFFFFFFFFF"
},
{
"begin": 2455,
"end": 2461,
"name": "DUP3",
"source": 4
},
{
"begin": 2452,
"end": 2482,
"name": "GT",
"source": 4
},
{
"begin": 2449,
"end": 2451,
"name": "ISZERO",
"source": 4
},
{
"begin": 2449,
"end": 2451,
"name": "PUSH [tag]",
"source": 4,
"value": "53"
},
{
"begin": 2449,
"end": 2451,
"name": "JUMPI",
"source": 4
},
{
"begin": 2485,
"end": 2503,
"name": "PUSH [tag]",
"source": 4,
"value": "54"
},
{
"begin": 2485,
"end": 2503,
"name": "PUSH [tag]",
"source": 4,
"value": "55"
},
{
"begin": 2485,
"end": 2503,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 2485,
"end": 2503,
"name": "tag",
"source": 4,
"value": "54"
},
{
"begin": 2485,
"end": 2503,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2449,
"end": 2451,
"name": "tag",
"source": 4,
"value": "53"
},
{
"begin": 2449,
"end": 2451,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2523,
"end": 2552,
"name": "PUSH [tag]",
"source": 4,
"value": "56"
},
{
"begin": 2545,
"end": 2551,
"name": "DUP3",
"source": 4
},
{
"begin": 2523,
"end": 2552,
"name": "PUSH [tag]",
"source": 4,
"value": "57"
},
{
"begin": 2523,
"end": 2552,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 2523,
"end": 2552,
"name": "tag",
"source": 4,
"value": "56"
},
{
"begin": 2523,
"end": 2552,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2515,
"end": 2552,
"name": "SWAP1",
"source": 4
},
{
"begin": 2515,
"end": 2552,
"name": "POP",
"source": 4
},
{
"begin": 2607,
"end": 2611,
"name": "PUSH",
"source": 4,
"value": "20"
},
{
"begin": 2601,
"end": 2605,
"name": "DUP2",
"source": 4
},
{
"begin": 2597,
"end": 2612,
"name": "ADD",
"source": 4
},
{
"begin": 2589,
"end": 2612,
"name": "SWAP1",
"source": 4
},
{
"begin": 2589,
"end": 2612,
"name": "POP",
"source": 4
},
{
"begin": 2378,
"end": 2619,
"name": "SWAP2",
"source": 4
},
{
"begin": 2378,
"end": 2619,
"name": "SWAP1",
"source": 4
},
{
"begin": 2378,
"end": 2619,
"name": "POP",
"source": 4
},
{
"begin": 2378,
"end": 2619,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 2625,
"end": 2721,
"name": "tag",
"source": 4,
"value": "58"
},
{
"begin": 2625,
"end": 2721,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2662,
"end": 2669,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 2691,
"end": 2715,
"name": "PUSH [tag]",
"source": 4,
"value": "60"
},
{
"begin": 2709,
"end": 2714,
"name": "DUP3",
"source": 4
},
{
"begin": 2691,
"end": 2715,
"name": "PUSH [tag]",
"source": 4,
"value": "61"
},
{
"begin": 2691,
"end": 2715,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 2691,
"end": 2715,
"name": "tag",
"source": 4,
"value": "60"
},
{
"begin": 2691,
"end": 2715,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2680,
"end": 2715,
"name": "SWAP1",
"source": 4
},
{
"begin": 2680,
"end": 2715,
"name": "POP",
"source": 4
},
{
"begin": 2670,
"end": 2721,
"name": "SWAP2",
"source": 4
},
{
"begin": 2670,
"end": 2721,
"name": "SWAP1",
"source": 4
},
{
"begin": 2670,
"end": 2721,
"name": "POP",
"source": 4
},
{
"begin": 2670,
"end": 2721,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 2727,
"end": 2876,
"name": "tag",
"source": 4,
"value": "43"
},
{
"begin": 2727,
"end": 2876,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2763,
"end": 2770,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 2803,
"end": 2869,
"name": "PUSH",
"source": 4,
"value": "FFFFFFFF00000000000000000000000000000000000000000000000000000000"
},
{
"begin": 2796,
"end": 2801,
"name": "DUP3",
"source": 4
},
{
"begin": 2792,
"end": 2870,
"name": "AND",
"source": 4
},
{
"begin": 2781,
"end": 2870,
"name": "SWAP1",
"source": 4
},
{
"begin": 2781,
"end": 2870,
"name": "POP",
"source": 4
},
{
"begin": 2771,
"end": 2876,
"name": "SWAP2",
"source": 4
},
{
"begin": 2771,
"end": 2876,
"name": "SWAP1",
"source": 4
},
{
"begin": 2771,
"end": 2876,
"name": "POP",
"source": 4
},
{
"begin": 2771,
"end": 2876,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 2882,
"end": 3008,
"name": "tag",
"source": 4,
"value": "61"
},
{
"begin": 2882,
"end": 3008,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 2919,
"end": 2926,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 2959,
"end": 3001,
"name": "PUSH",
"source": 4,
"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
},
{
"begin": 2952,
"end": 2957,
"name": "DUP3",
"source": 4
},
{
"begin": 2948,
"end": 3002,
"name": "AND",
"source": 4
},
{
"begin": 2937,
"end": 3002,
"name": "SWAP1",
"source": 4
},
{
"begin": 2937,
"end": 3002,
"name": "POP",
"source": 4
},
{
"begin": 2927,
"end": 3008,
"name": "SWAP2",
"source": 4
},
{
"begin": 2927,
"end": 3008,
"name": "SWAP1",
"source": 4
},
{
"begin": 2927,
"end": 3008,
"name": "POP",
"source": 4
},
{
"begin": 2927,
"end": 3008,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 3014,
"end": 3091,
"name": "tag",
"source": 4,
"value": "64"
},
{
"begin": 3014,
"end": 3091,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3051,
"end": 3058,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 3080,
"end": 3085,
"name": "DUP2",
"source": 4
},
{
"begin": 3069,
"end": 3085,
"name": "SWAP1",
"source": 4
},
{
"begin": 3069,
"end": 3085,
"name": "POP",
"source": 4
},
{
"begin": 3059,
"end": 3091,
"name": "SWAP2",
"source": 4
},
{
"begin": 3059,
"end": 3091,
"name": "SWAP1",
"source": 4
},
{
"begin": 3059,
"end": 3091,
"name": "POP",
"source": 4
},
{
"begin": 3059,
"end": 3091,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 3097,
"end": 3251,
"name": "tag",
"source": 4,
"value": "20"
},
{
"begin": 3097,
"end": 3251,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3181,
"end": 3187,
"name": "DUP3",
"source": 4
},
{
"begin": 3176,
"end": 3179,
"name": "DUP2",
"source": 4
},
{
"begin": 3171,
"end": 3174,
"name": "DUP4",
"source": 4
},
{
"begin": 3158,
"end": 3188,
"name": "CALLDATACOPY",
"source": 4
},
{
"begin": 3243,
"end": 3244,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 3234,
"end": 3240,
"name": "DUP4",
"source": 4
},
{
"begin": 3229,
"end": 3232,
"name": "DUP4",
"source": 4
},
{
"begin": 3225,
"end": 3241,
"name": "ADD",
"source": 4
},
{
"begin": 3218,
"end": 3245,
"name": "MSTORE",
"source": 4
},
{
"begin": 3148,
"end": 3251,
"name": "POP",
"source": 4
},
{
"begin": 3148,
"end": 3251,
"name": "POP",
"source": 4
},
{
"begin": 3148,
"end": 3251,
"name": "POP",
"source": 4
},
{
"begin": 3148,
"end": 3251,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 3257,
"end": 3538,
"name": "tag",
"source": 4,
"value": "50"
},
{
"begin": 3257,
"end": 3538,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3340,
"end": 3367,
"name": "PUSH [tag]",
"source": 4,
"value": "68"
},
{
"begin": 3362,
"end": 3366,
"name": "DUP3",
"source": 4
},
{
"begin": 3340,
"end": 3367,
"name": "PUSH [tag]",
"source": 4,
"value": "57"
},
{
"begin": 3340,
"end": 3367,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 3340,
"end": 3367,
"name": "tag",
"source": 4,
"value": "68"
},
{
"begin": 3340,
"end": 3367,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3332,
"end": 3338,
"name": "DUP2",
"source": 4
},
{
"begin": 3328,
"end": 3368,
"name": "ADD",
"source": 4
},
{
"begin": 3470,
"end": 3476,
"name": "DUP2",
"source": 4
},
{
"begin": 3458,
"end": 3468,
"name": "DUP2",
"source": 4
},
{
"begin": 3455,
"end": 3477,
"name": "LT",
"source": 4
},
{
"begin": 3434,
"end": 3452,
"name": "PUSH",
"source": 4,
"value": "FFFFFFFFFFFFFFFF"
},
{
"begin": 3422,
"end": 3432,
"name": "DUP3",
"source": 4
},
{
"begin": 3419,
"end": 3453,
"name": "GT",
"source": 4
},
{
"begin": 3416,
"end": 3478,
"name": "OR",
"source": 4
},
{
"begin": 3413,
"end": 3415,
"name": "ISZERO",
"source": 4
},
{
"begin": 3413,
"end": 3415,
"name": "PUSH [tag]",
"source": 4,
"value": "69"
},
{
"begin": 3413,
"end": 3415,
"name": "JUMPI",
"source": 4
},
{
"begin": 3481,
"end": 3499,
"name": "PUSH [tag]",
"source": 4,
"value": "70"
},
{
"begin": 3481,
"end": 3499,
"name": "PUSH [tag]",
"source": 4,
"value": "55"
},
{
"begin": 3481,
"end": 3499,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 3481,
"end": 3499,
"name": "tag",
"source": 4,
"value": "70"
},
{
"begin": 3481,
"end": 3499,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3413,
"end": 3415,
"name": "tag",
"source": 4,
"value": "69"
},
{
"begin": 3413,
"end": 3415,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3521,
"end": 3531,
"name": "DUP1",
"source": 4
},
{
"begin": 3517,
"end": 3519,
"name": "PUSH",
"source": 4,
"value": "40"
},
{
"begin": 3510,
"end": 3532,
"name": "MSTORE",
"source": 4
},
{
"begin": 3300,
"end": 3538,
"name": "POP",
"source": 4
},
{
"begin": 3300,
"end": 3538,
"name": "POP",
"source": 4
},
{
"begin": 3300,
"end": 3538,
"name": "POP",
"source": 4
},
{
"begin": 3300,
"end": 3538,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 3544,
"end": 3724,
"name": "tag",
"source": 4,
"value": "55"
},
{
"begin": 3544,
"end": 3724,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3592,
"end": 3669,
"name": "PUSH",
"source": 4,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 3589,
"end": 3590,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 3582,
"end": 3670,
"name": "MSTORE",
"source": 4
},
{
"begin": 3689,
"end": 3693,
"name": "PUSH",
"source": 4,
"value": "41"
},
{
"begin": 3686,
"end": 3687,
"name": "PUSH",
"source": 4,
"value": "4"
},
{
"begin": 3679,
"end": 3694,
"name": "MSTORE",
"source": 4
},
{
"begin": 3713,
"end": 3717,
"name": "PUSH",
"source": 4,
"value": "24"
},
{
"begin": 3710,
"end": 3711,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 3703,
"end": 3718,
"name": "REVERT",
"source": 4
},
{
"begin": 3730,
"end": 3832,
"name": "tag",
"source": 4,
"value": "57"
},
{
"begin": 3730,
"end": 3832,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3771,
"end": 3777,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 3822,
"end": 3824,
"name": "PUSH",
"source": 4,
"value": "1F"
},
{
"begin": 3818,
"end": 3825,
"name": "NOT",
"source": 4
},
{
"begin": 3813,
"end": 3815,
"name": "PUSH",
"source": 4,
"value": "1F"
},
{
"begin": 3806,
"end": 3811,
"name": "DUP4",
"source": 4
},
{
"begin": 3802,
"end": 3816,
"name": "ADD",
"source": 4
},
{
"begin": 3798,
"end": 3826,
"name": "AND",
"source": 4
},
{
"begin": 3788,
"end": 3826,
"name": "SWAP1",
"source": 4
},
{
"begin": 3788,
"end": 3826,
"name": "POP",
"source": 4
},
{
"begin": 3778,
"end": 3832,
"name": "SWAP2",
"source": 4
},
{
"begin": 3778,
"end": 3832,
"name": "SWAP1",
"source": 4
},
{
"begin": 3778,
"end": 3832,
"name": "POP",
"source": 4
},
{
"begin": 3778,
"end": 3832,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 3838,
"end": 3960,
"name": "tag",
"source": 4,
"value": "24"
},
{
"begin": 3838,
"end": 3960,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3911,
"end": 3935,
"name": "PUSH [tag]",
"source": 4,
"value": "74"
},
{
"begin": 3929,
"end": 3934,
"name": "DUP2",
"source": 4
},
{
"begin": 3911,
"end": 3935,
"name": "PUSH [tag]",
"source": 4,
"value": "58"
},
{
"begin": 3911,
"end": 3935,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 3911,
"end": 3935,
"name": "tag",
"source": 4,
"value": "74"
},
{
"begin": 3911,
"end": 3935,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3904,
"end": 3909,
"name": "DUP2",
"source": 4
},
{
"begin": 3901,
"end": 3936,
"name": "EQ",
"source": 4
},
{
"begin": 3891,
"end": 3893,
"name": "PUSH [tag]",
"source": 4,
"value": "75"
},
{
"begin": 3891,
"end": 3893,
"name": "JUMPI",
"source": 4
},
{
"begin": 3950,
"end": 3951,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 3947,
"end": 3948,
"name": "DUP1",
"source": 4
},
{
"begin": 3940,
"end": 3952,
"name": "REVERT",
"source": 4
},
{
"begin": 3891,
"end": 3893,
"name": "tag",
"source": 4,
"value": "75"
},
{
"begin": 3891,
"end": 3893,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 3881,
"end": 3960,
"name": "POP",
"source": 4
},
{
"begin": 3881,
"end": 3960,
"name": "JUMP",
"source": 4,
"value": "[out]"
},
{
"begin": 3966,
"end": 4088,
"name": "tag",
"source": 4,
"value": "32"
},
{
"begin": 3966,
"end": 4088,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 4039,
"end": 4063,
"name": "PUSH [tag]",
"source": 4,
"value": "77"
},
{
"begin": 4057,
"end": 4062,
"name": "DUP2",
"source": 4
},
{
"begin": 4039,
"end": 4063,
"name": "PUSH [tag]",
"source": 4,
"value": "64"
},
{
"begin": 4039,
"end": 4063,
"name": "JUMP",
"source": 4,
"value": "[in]"
},
{
"begin": 4039,
"end": 4063,
"name": "tag",
"source": 4,
"value": "77"
},
{
"begin": 4039,
"end": 4063,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 4032,
"end": 4037,
"name": "DUP2",
"source": 4
},
{
"begin": 4029,
"end": 4064,
"name": "EQ",
"source": 4
},
{
"begin": 4019,
"end": 4021,
"name": "PUSH [tag]",
"source": 4,
"value": "78"
},
{
"begin": 4019,
"end": 4021,
"name": "JUMPI",
"source": 4
},
{
"begin": 4078,
"end": 4079,
"name": "PUSH",
"source": 4,
"value": "0"
},
{
"begin": 4075,
"end": 4076,
"name": "DUP1",
"source": 4
},
{
"begin": 4068,
"end": 4080,
"name": "REVERT",
"source": 4
},
{
"begin": 4019,
"end": 4021,
"name": "tag",
"source": 4,
"value": "78"
},
{
"begin": 4019,
"end": 4021,
"name": "JUMPDEST",
"source": 4
},
{
"begin": 4009,
"end": 4088,
"name": "POP",
"source": 4
},
{
"begin": 4009,
"end": 4088,
"name": "JUMP",
"source": 4,
"value": "[out]"
}
]
}
}
},
"methodIdentifiers": {
"onERC721Received(address,address,uint256,bytes)": "150b7a02"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC721Receiver} interface. Accepts all token transfers. Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"fractionalArt/ERC721HolderUpgradeable.sol\":\"ERC721HolderUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"fractionalArt/ERC721HolderUpgradeable.sol\":{\"keccak256\":\"0xa90ba0d86644585c5d9f6d81c8a8bdca93e3bbc69a679f9ab917b01be42c9502\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c0f63626509e863e701c2e884c1866c5b57bd5f120b6acce38a275111d04bb92\",\"dweb:/ipfs/QmQsePDv1oJ12mCnrhMvLXDbbg1VBT383NqLYAh6FB312B\"]},\"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol\":{\"keccak256\":\"0x45939090956d43db0c9a22a06d82b60fed9e24d12c7d01f57a97c870cc134636\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9a96316f2a4e4a5101293223bfb68efdb0ca91245bead8cebb66087d663fd173\",\"dweb:/ipfs/QmYyvEafy4sQNqCqPKZcWmSTApZ4h6auurwU3UQmtVrnX2\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x98715cf174afc65e83085bd972f70336b7be67cff174d3fe6b42554625e24ae6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2feaab6a982342b18e931689b6435ec4730740ce4f45d019417491b72a6ce035\",\"dweb:/ipfs/QmNvwGLGNU1PrrfoDLrSoKtnzzeyopGXAwD5rATF185rjw\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol\":{\"keccak256\":\"0x68404b57d114b893554b0e54334b32f578f5d1abf61830025c83fb71dc1944ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3d0a94b3c8afd92c2a9f03f3325e9ac22cec56e995b94ff212670ff3653f0d3\",\"dweb:/ipfs/QmPqKWUysbo8QqKcqH5Lp7SQiL1LfjeoGCSa7iFWmAP8Mw\"]}},\"version\":1}",
"storageLayout": {
"storage": [
{
"astId": 73,
"contract": "fractionalArt/ERC721HolderUpgradeable.sol:ERC721HolderUpgradeable",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
},
{
"astId": 76,
"contract": "fractionalArt/ERC721HolderUpgradeable.sol:ERC721HolderUpgradeable",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
},
{
"astId": 47,
"contract": "fractionalArt/ERC721HolderUpgradeable.sol:ERC721HolderUpgradeable",
"label": "__gap",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)50_storage"
}
],
"types": {
"t_array(t_uint256)50_storage": {
"base": "t_uint256",
"encoding": "inplace",
"label": "uint256[50]",
"numberOfBytes": "1600"
},
"t_bool": {
"encoding": "inplace",
"label": "bool",
"numberOfBytes": "1"
},
"t_uint256": {
"encoding": "inplace",
"label": "uint256",
"numberOfBytes": "32"
},
"t_uint8": {
"encoding": "inplace",
"label": "uint8",
"numberOfBytes": "1"
}
}
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": {
"IERC721ReceiverUpgradeable": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.",
"kind": "dev",
"methods": {
"onERC721Received(address,address,uint256,bytes)": {
"details": "Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
}
},
"title": "ERC721 token receiver interface",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"onERC721Received(address,address,uint256,bytes)": "150b7a02"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\"}},\"title\":\"ERC721 token receiver interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol\":\"IERC721ReceiverUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol\":{\"keccak256\":\"0x45939090956d43db0c9a22a06d82b60fed9e24d12c7d01f57a97c870cc134636\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9a96316f2a4e4a5101293223bfb68efdb0ca91245bead8cebb66087d663fd173\",\"dweb:/ipfs/QmYyvEafy4sQNqCqPKZcWmSTApZ4h6auurwU3UQmtVrnX2\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol": {
"Initializable": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
}
],
"devdoc": {
"custom:oz-upgrades-unsafe-allow": "constructor constructor() { _disableInitializers(); } ``` ====",
"details": "This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ``` contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\"MyToken\", \"MTK\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\"MyToken\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```",
"events": {
"Initialized(uint8)": {
"details": "Triggered when the contract has been initialized or reinitialized."
}
},
"kind": "dev",
"methods": {},
"stateVariables": {
"_initialized": {
"custom:oz-retyped-from": "bool",
"details": "Indicates that the contract has been initialized."
},
"_initializing": {
"details": "Indicates that the contract is in the process of being initialized."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() { _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ``` contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\\\"MyToken\\\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_initialized\":{\"custom:oz-retyped-from\":\"bool\",\"details\":\"Indicates that the contract has been initialized.\"},\"_initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x98715cf174afc65e83085bd972f70336b7be67cff174d3fe6b42554625e24ae6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2feaab6a982342b18e931689b6435ec4730740ce4f45d019417491b72a6ce035\",\"dweb:/ipfs/QmNvwGLGNU1PrrfoDLrSoKtnzzeyopGXAwD5rATF185rjw\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol\":{\"keccak256\":\"0x68404b57d114b893554b0e54334b32f578f5d1abf61830025c83fb71dc1944ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3d0a94b3c8afd92c2a9f03f3325e9ac22cec56e995b94ff212670ff3653f0d3\",\"dweb:/ipfs/QmPqKWUysbo8QqKcqH5Lp7SQiL1LfjeoGCSa7iFWmAP8Mw\"]}},\"version\":1}",
"storageLayout": {
"storage": [
{
"astId": 73,
"contract": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol:Initializable",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
},
{
"astId": 76,
"contract": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol:Initializable",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
}
],
"types": {
"t_bool": {
"encoding": "inplace",
"label": "bool",
"numberOfBytes": "1"
},
"t_uint8": {
"encoding": "inplace",
"label": "uint8",
"numberOfBytes": "1"
}
}
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol": {
"Address": {
"abi": [],
"devdoc": {
"details": "Collection of functions related to the address type",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol\":194:9157 library Address {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol\":194:9157 library Address {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220a86f360408564df49ed633127d03de61c11fe4e23717dfcc9c66994623de0a8b64736f6c63430008040033\n}\n",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a86f360408564df49ed633127d03de61c11fe4e23717dfcc9c66994623de0a8b64736f6c63430008040033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 PUSH16 0x360408564DF49ED633127D03DE61C11F 0xE4 0xE2 CALLDATACOPY OR 0xDF 0xCC SWAP13 PUSH7 0x994623DE0A8B64 PUSH20 0x6F6C634300080400330000000000000000000000 ",
"sourceMap": "194:8963:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a86f360408564df49ed633127d03de61c11fe4e23717dfcc9c66994623de0a8b64736f6c63430008040033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 PUSH16 0x360408564DF49ED633127D03DE61C11F 0xE4 0xE2 CALLDATACOPY OR 0xDF 0xCC SWAP13 PUSH7 0x994623DE0A8B64 PUSH20 0x6F6C634300080400330000000000000000000000 ",
"sourceMap": "194:8963:3:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"_revert(bytes memory,string memory)": "infinite",
"functionCall(address,bytes memory)": "infinite",
"functionCall(address,bytes memory,string memory)": "infinite",
"functionCallWithValue(address,bytes memory,uint256)": "infinite",
"functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite",
"functionDelegateCall(address,bytes memory)": "infinite",
"functionDelegateCall(address,bytes memory,string memory)": "infinite",
"functionStaticCall(address,bytes memory)": "infinite",
"functionStaticCall(address,bytes memory,string memory)": "infinite",
"isContract(address)": "infinite",
"sendValue(address payable,uint256)": "infinite",
"verifyCallResult(bool,bytes memory,string memory)": "infinite",
"verifyCallResultFromTarget(address,bool,bytes memory,string memory)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 194,
"end": 9157,
"name": "PUSH #[$]",
"source": 3,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 194,
"end": 9157,
"name": "PUSH [$]",
"source": 3,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "B"
},
{
"begin": 194,
"end": 9157,
"name": "DUP3",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "DUP3",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "DUP3",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "CODECOPY",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "DUP1",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "MLOAD",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 194,
"end": 9157,
"name": "BYTE",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "73"
},
{
"begin": 194,
"end": 9157,
"name": "EQ",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH [tag]",
"source": 3,
"value": "1"
},
{
"begin": 194,
"end": 9157,
"name": "JUMPI",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 194,
"end": 9157,
"name": "MSTORE",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "4"
},
{
"begin": 194,
"end": 9157,
"name": "MSTORE",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "24"
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 194,
"end": 9157,
"name": "REVERT",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "tag",
"source": 3,
"value": "1"
},
{
"begin": 194,
"end": 9157,
"name": "JUMPDEST",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "ADDRESS",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 194,
"end": 9157,
"name": "MSTORE",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "73"
},
{
"begin": 194,
"end": 9157,
"name": "DUP2",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "MSTORE8",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "DUP3",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "DUP2",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "RETURN",
"source": 3
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220a86f360408564df49ed633127d03de61c11fe4e23717dfcc9c66994623de0a8b64736f6c63430008040033",
".code": [
{
"begin": 194,
"end": 9157,
"name": "PUSHDEPLOYADDRESS",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "ADDRESS",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "EQ",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "80"
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "40"
},
{
"begin": 194,
"end": 9157,
"name": "MSTORE",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 194,
"end": 9157,
"name": "DUP1",
"source": 3
},
{
"begin": 194,
"end": 9157,
"name": "REVERT",
"source": 3
}
]
}
}
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol\":{\"keccak256\":\"0x68404b57d114b893554b0e54334b32f578f5d1abf61830025c83fb71dc1944ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3d0a94b3c8afd92c2a9f03f3325e9ac22cec56e995b94ff212670ff3653f0d3\",\"dweb:/ipfs/QmPqKWUysbo8QqKcqH5Lp7SQiL1LfjeoGCSa7iFWmAP8Mw\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"errors": [
{
"component": "general",
"errorCode": "6321",
"formattedMessage": "Warning: Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n --> https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol:200:30:\n |\n200 | ) internal view returns (bytes memory) {\n | ^^^^^^^^^^^^\n\n",
"message": "Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.",
"severity": "warning",
"sourceLocation": {
"end": 7657,
"file": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol",
"start": 7645
},
"type": "Warning"
},
{
"component": "general",
"errorCode": "6321",
"formattedMessage": "Warning: Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n --> https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol:223:30:\n |\n223 | ) internal pure returns (bytes memory) {\n | ^^^^^^^^^^^^\n\n",
"message": "Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.",
"severity": "warning",
"sourceLocation": {
"end": 8472,
"file": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol",
"start": 8460
},
"type": "Warning"
}
],
"sources": {
"fractionalArt/ERC721HolderUpgradeable.sol": {
"ast": {
"absolutePath": "fractionalArt/ERC721HolderUpgradeable.sol",
"exportedSymbols": {
"Address": [
565
],
"ERC721HolderUpgradeable": [
48
],
"IERC721ReceiverUpgradeable": [
66
],
"Initializable": [
235
]
},
"id": 49,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "33:23:0"
},
{
"absolutePath": "fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol",
"file": "./Interfaces/IERC721ReceiverUpgradeable.sol",
"id": 2,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 49,
"sourceUnit": 67,
"src": "58:53:0",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol",
"file": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol",
"id": 3,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 49,
"sourceUnit": 236,
"src": "112:116:0",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [
{
"baseName": {
"id": 5,
"name": "Initializable",
"nodeType": "IdentifierPath",
"referencedDeclaration": 235,
"src": "502:13:0"
},
"id": 6,
"nodeType": "InheritanceSpecifier",
"src": "502:13:0"
},
{
"baseName": {
"id": 7,
"name": "IERC721ReceiverUpgradeable",
"nodeType": "IdentifierPath",
"referencedDeclaration": 66,
"src": "517:26:0"
},
"id": 8,
"nodeType": "InheritanceSpecifier",
"src": "517:26:0"
}
],
"contractDependencies": [],
"contractKind": "contract",
"documentation": {
"id": 4,
"nodeType": "StructuredDocumentation",
"src": "230:235:0",
"text": " @dev Implementation of the {IERC721Receiver} interface.\n Accepts all token transfers.\n Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}."
},
"fullyImplemented": true,
"id": 48,
"linearizedBaseContracts": [
48,
66,
235
],
"name": "ERC721HolderUpgradeable",
"nameLocation": "475:23:0",
"nodeType": "ContractDefinition",
"nodes": [
{
"body": {
"id": 16,
"nodeType": "Block",
"src": "602:48:0",
"statements": [
{
"expression": {
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 13,
"name": "__ERC721Holder_init_unchained",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 23,
"src": "612:29:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
"typeString": "function ()"
}
},
"id": 14,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "612:31:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 15,
"nodeType": "ExpressionStatement",
"src": "612:31:0"
}
]
},
"id": 17,
"implemented": true,
"kind": "function",
"modifiers": [
{
"id": 11,
"kind": "modifierInvocation",
"modifierName": {
"id": 10,
"name": "initializer",
"nodeType": "IdentifierPath",
"referencedDeclaration": 137,
"src": "590:11:0"
},
"nodeType": "ModifierInvocation",
"src": "590:11:0"
}
],
"name": "__ERC721Holder_init",
"nameLocation": "559:19:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 9,
"nodeType": "ParameterList",
"parameters": [],
"src": "578:2:0"
},
"returnParameters": {
"id": 12,
"nodeType": "ParameterList",
"parameters": [],
"src": "602:0:0"
},
"scope": 48,
"src": "550:100:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 22,
"nodeType": "Block",
"src": "718:7:0",
"statements": []
},
"id": 23,
"implemented": true,
"kind": "function",
"modifiers": [
{
"id": 20,
"kind": "modifierInvocation",
"modifierName": {
"id": 19,
"name": "initializer",
"nodeType": "IdentifierPath",
"referencedDeclaration": 137,
"src": "706:11:0"
},
"nodeType": "ModifierInvocation",
"src": "706:11:0"
}
],
"name": "__ERC721Holder_init_unchained",
"nameLocation": "665:29:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 18,
"nodeType": "ParameterList",
"parameters": [],
"src": "694:2:0"
},
"returnParameters": {
"id": 21,
"nodeType": "ParameterList",
"parameters": [],
"src": "718:0:0"
},
"scope": 48,
"src": "656:69:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"baseFunctions": [
65
],
"body": {
"id": 42,
"nodeType": "Block",
"src": "1018:54:0",
"statements": [
{
"expression": {
"expression": {
"expression": {
"id": 38,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967268,
"src": "1035:4:0",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ERC721HolderUpgradeable_$48",
"typeString": "contract ERC721HolderUpgradeable"
}
},
"id": 39,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "onERC721Received",
"nodeType": "MemberAccess",
"referencedDeclaration": 43,
"src": "1035:21:0",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
"typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
}
},
"id": 40,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "selector",
"nodeType": "MemberAccess",
"src": "1035:30:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"functionReturnParameters": 37,
"id": 41,
"nodeType": "Return",
"src": "1028:37:0"
}
]
},
"documentation": {
"id": 24,
"nodeType": "StructuredDocumentation",
"src": "730:137:0",
"text": " @dev See {IERC721Receiver-onERC721Received}.\n Always returns `IERC721Receiver.onERC721Received.selector`."
},
"functionSelector": "150b7a02",
"id": 43,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "onERC721Received",
"nameLocation": "881:16:0",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 34,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "992:8:0"
},
"parameters": {
"id": 33,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 26,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 43,
"src": "907:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 25,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "907:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 28,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 43,
"src": "924:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 27,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "924:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 30,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 43,
"src": "941:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 29,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "941:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 32,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 43,
"src": "958:12:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 31,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "958:5:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "897:79:0"
},
"returnParameters": {
"id": 37,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 36,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 43,
"src": "1010:6:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 35,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "1010:6:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"visibility": "internal"
}
],
"src": "1009:8:0"
},
"scope": 48,
"src": "872:200:0",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"constant": false,
"id": 47,
"mutability": "mutable",
"name": "__gap",
"nameLocation": "1097:5:0",
"nodeType": "VariableDeclaration",
"scope": 48,
"src": "1077:25:0",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$50_storage",
"typeString": "uint256[50]"
},
"typeName": {
"baseType": {
"id": 44,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1077:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 46,
"length": {
"hexValue": "3530",
"id": 45,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1085:2:0",
"typeDescriptions": {
"typeIdentifier": "t_rational_50_by_1",
"typeString": "int_const 50"
},
"value": "50"
},
"nodeType": "ArrayTypeName",
"src": "1077:11:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$50_storage_ptr",
"typeString": "uint256[50]"
}
},
"visibility": "private"
}
],
"scope": 49,
"src": "466:639:0",
"usedErrors": []
}
],
"src": "33:1072:0"
},
"id": 0
},
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": {
"ast": {
"absolutePath": "fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol",
"exportedSymbols": {
"IERC721ReceiverUpgradeable": [
66
]
},
"id": 67,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 50,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "33:23:1"
},
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "interface",
"documentation": {
"id": 51,
"nodeType": "StructuredDocumentation",
"src": "58:152:1",
"text": " @title ERC721 token receiver interface\n @dev Interface for any contract that wants to support safeTransfers\n from ERC721 asset contracts."
},
"fullyImplemented": false,
"id": 66,
"linearizedBaseContracts": [
66
],
"name": "IERC721ReceiverUpgradeable",
"nameLocation": "221:26:1",
"nodeType": "ContractDefinition",
"nodes": [
{
"documentation": {
"id": 52,
"nodeType": "StructuredDocumentation",
"src": "254:485:1",
"text": " @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n by `operator` from `from`, this function is called.\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 reverted.\n The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
},
"functionSelector": "150b7a02",
"id": 65,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "onERC721Received",
"nameLocation": "753:16:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 61,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 54,
"mutability": "mutable",
"name": "operator",
"nameLocation": "787:8:1",
"nodeType": "VariableDeclaration",
"scope": 65,
"src": "779:16:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 53,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "779:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 56,
"mutability": "mutable",
"name": "from",
"nameLocation": "813:4:1",
"nodeType": "VariableDeclaration",
"scope": 65,
"src": "805:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 55,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "805:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 58,
"mutability": "mutable",
"name": "tokenId",
"nameLocation": "835:7:1",
"nodeType": "VariableDeclaration",
"scope": 65,
"src": "827:15:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 57,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "827:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 60,
"mutability": "mutable",
"name": "data",
"nameLocation": "867:4:1",
"nodeType": "VariableDeclaration",
"scope": 65,
"src": "852:19:1",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 59,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "852:5:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "769:108:1"
},
"returnParameters": {
"id": 64,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 63,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 65,
"src": "896:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 62,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "896:6:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"visibility": "internal"
}
],
"src": "895:8:1"
},
"scope": 66,
"src": "744:160:1",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
}
],
"scope": 67,
"src": "211:695:1",
"usedErrors": []
}
],
"src": "33:873:1"
},
"id": 1
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol": {
"ast": {
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol",
"exportedSymbols": {
"Address": [
565
],
"Initializable": [
235
]
},
"id": 236,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 68,
"literals": [
"solidity",
"^",
"0.8",
".2"
],
"nodeType": "PragmaDirective",
"src": "113:23:2"
},
{
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol",
"file": "../../utils/Address.sol",
"id": 69,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 236,
"sourceUnit": 566,
"src": "138:33:2",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": true,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "contract",
"documentation": {
"id": 70,
"nodeType": "StructuredDocumentation",
"src": "173:2198:2",
"text": " @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```\n contract MyToken is ERC20Upgradeable {\n function initialize() initializer public {\n __ERC20_init(\"MyToken\", \"MTK\");\n }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n function initializeV2() reinitializer(2) public {\n __ERC20Permit_init(\"MyToken\");\n }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n _disableInitializers();\n }\n ```\n ===="
},
"fullyImplemented": true,
"id": 235,
"linearizedBaseContracts": [
235
],
"name": "Initializable",
"nameLocation": "2390:13:2",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": false,
"documentation": {
"id": 71,
"nodeType": "StructuredDocumentation",
"src": "2410:109:2",
"text": " @dev Indicates that the contract has been initialized.\n @custom:oz-retyped-from bool"
},
"id": 73,
"mutability": "mutable",
"name": "_initialized",
"nameLocation": "2538:12:2",
"nodeType": "VariableDeclaration",
"scope": 235,
"src": "2524:26:2",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 72,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "2524:5:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"visibility": "private"
},
{
"constant": false,
"documentation": {
"id": 74,
"nodeType": "StructuredDocumentation",
"src": "2557:91:2",
"text": " @dev Indicates that the contract is in the process of being initialized."
},
"id": 76,
"mutability": "mutable",
"name": "_initializing",
"nameLocation": "2666:13:2",
"nodeType": "VariableDeclaration",
"scope": 235,
"src": "2653:26:2",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 75,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2653:4:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "private"
},
{
"anonymous": false,
"documentation": {
"id": 77,
"nodeType": "StructuredDocumentation",
"src": "2686:90:2",
"text": " @dev Triggered when the contract has been initialized or reinitialized."
},
"id": 81,
"name": "Initialized",
"nameLocation": "2787:11:2",
"nodeType": "EventDefinition",
"parameters": {
"id": 80,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 79,
"indexed": false,
"mutability": "mutable",
"name": "version",
"nameLocation": "2805:7:2",
"nodeType": "VariableDeclaration",
"scope": 81,
"src": "2799:13:2",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 78,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "2799:5:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"visibility": "internal"
}
],
"src": "2798:15:2"
},
"src": "2781:33:2"
},
{
"body": {
"id": 136,
"nodeType": "Block",
"src": "3247:472:2",
"statements": [
{
"assignments": [
85
],
"declarations": [
{
"constant": false,
"id": 85,
"mutability": "mutable",
"name": "isTopLevelCall",
"nameLocation": "3262:14:2",
"nodeType": "VariableDeclaration",
"scope": 136,
"src": "3257:19:2",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 84,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3257:4:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"id": 88,
"initialValue": {
"id": 87,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "3279:14:2",
"subExpression": {
"id": 86,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "3280:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3257:36:2"
},
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 109,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 94,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 90,
"name": "isTopLevelCall",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 85,
"src": "3325:14:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 93,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 91,
"name": "_initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 73,
"src": "3343:12:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"hexValue": "31",
"id": 92,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3358:1:2",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "3343:16:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "3325:34:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"id": 95,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "3324:36:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 107,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 103,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "3365:34:2",
"subExpression": {
"arguments": [
{
"arguments": [
{
"id": 100,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967268,
"src": "3393:4:2",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Initializable_$235",
"typeString": "contract Initializable"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_Initializable_$235",
"typeString": "contract Initializable"
}
],
"id": 99,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3385:7:2",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 98,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3385:7:2",
"typeDescriptions": {}
}
},
"id": 101,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3385:13:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"id": 96,
"name": "Address",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 565,
"src": "3366:7:2",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_Address_$565_$",
"typeString": "type(library Address)"
}
},
"id": 97,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "isContract",
"nodeType": "MemberAccess",
"referencedDeclaration": 253,
"src": "3366:18:2",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
"typeString": "function (address) view returns (bool)"
}
},
"id": 102,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3366:33:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 106,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 104,
"name": "_initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 73,
"src": "3403:12:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "31",
"id": 105,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3419:1:2",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "3403:17:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "3365:55:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"id": 108,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "3364:57:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "3324:97:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564",
"id": 110,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3435:48:2",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759",
"typeString": "literal_string \"Initializable: contract is already initialized\""
},
"value": "Initializable: contract is already initialized"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759",
"typeString": "literal_string \"Initializable: contract is already initialized\""
}
],
"id": 89,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "3303:7:2",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 111,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3303:190:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 112,
"nodeType": "ExpressionStatement",
"src": "3303:190:2"
},
{
"expression": {
"id": 115,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 113,
"name": "_initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 73,
"src": "3503:12:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "31",
"id": 114,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3518:1:2",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "3503:16:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"id": 116,
"nodeType": "ExpressionStatement",
"src": "3503:16:2"
},
{
"condition": {
"id": 117,
"name": "isTopLevelCall",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 85,
"src": "3533:14:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 123,
"nodeType": "IfStatement",
"src": "3529:65:2",
"trueBody": {
"id": 122,
"nodeType": "Block",
"src": "3549:45:2",
"statements": [
{
"expression": {
"id": 120,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 118,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "3563:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "74727565",
"id": 119,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3579:4:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"src": "3563:20:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 121,
"nodeType": "ExpressionStatement",
"src": "3563:20:2"
}
]
}
},
{
"id": 124,
"nodeType": "PlaceholderStatement",
"src": "3603:1:2"
},
{
"condition": {
"id": 125,
"name": "isTopLevelCall",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 85,
"src": "3618:14:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 135,
"nodeType": "IfStatement",
"src": "3614:99:2",
"trueBody": {
"id": 134,
"nodeType": "Block",
"src": "3634:79:2",
"statements": [
{
"expression": {
"id": 128,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 126,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "3648:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "66616c7365",
"id": 127,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3664:5:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"src": "3648:21:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 129,
"nodeType": "ExpressionStatement",
"src": "3648:21:2"
},
{
"eventCall": {
"arguments": [
{
"hexValue": "31",
"id": 131,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3700:1:2",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
}
],
"id": 130,
"name": "Initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 81,
"src": "3688:11:2",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_uint8_$returns$__$",
"typeString": "function (uint8)"
}
},
"id": 132,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3688:14:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 133,
"nodeType": "EmitStatement",
"src": "3683:19:2"
}
]
}
}
]
},
"documentation": {
"id": 82,
"nodeType": "StructuredDocumentation",
"src": "2820:399:2",
"text": " @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n constructor.\n Emits an {Initialized} event."
},
"id": 137,
"name": "initializer",
"nameLocation": "3233:11:2",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 83,
"nodeType": "ParameterList",
"parameters": [],
"src": "3244:2:2"
},
"src": "3224:495:2",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 169,
"nodeType": "Block",
"src": "4830:255:2",
"statements": [
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 148,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 144,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "4848:14:2",
"subExpression": {
"id": 143,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "4849:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 147,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 145,
"name": "_initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 73,
"src": "4866:12:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"id": 146,
"name": "version",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 140,
"src": "4881:7:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "4866:22:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "4848:40:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564",
"id": 149,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4890:48:2",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759",
"typeString": "literal_string \"Initializable: contract is already initialized\""
},
"value": "Initializable: contract is already initialized"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759",
"typeString": "literal_string \"Initializable: contract is already initialized\""
}
],
"id": 142,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "4840:7:2",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 150,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4840:99:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 151,
"nodeType": "ExpressionStatement",
"src": "4840:99:2"
},
{
"expression": {
"id": 154,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 152,
"name": "_initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 73,
"src": "4949:12:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 153,
"name": "version",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 140,
"src": "4964:7:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "4949:22:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"id": 155,
"nodeType": "ExpressionStatement",
"src": "4949:22:2"
},
{
"expression": {
"id": 158,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 156,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "4981:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "74727565",
"id": 157,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4997:4:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"src": "4981:20:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 159,
"nodeType": "ExpressionStatement",
"src": "4981:20:2"
},
{
"id": 160,
"nodeType": "PlaceholderStatement",
"src": "5011:1:2"
},
{
"expression": {
"id": 163,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 161,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "5022:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "66616c7365",
"id": 162,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5038:5:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"src": "5022:21:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 164,
"nodeType": "ExpressionStatement",
"src": "5022:21:2"
},
{
"eventCall": {
"arguments": [
{
"id": 166,
"name": "version",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 140,
"src": "5070:7:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
],
"id": 165,
"name": "Initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 81,
"src": "5058:11:2",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_uint8_$returns$__$",
"typeString": "function (uint8)"
}
},
"id": 167,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5058:20:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 168,
"nodeType": "EmitStatement",
"src": "5053:25:2"
}
]
},
"documentation": {
"id": 138,
"nodeType": "StructuredDocumentation",
"src": "3725:1062:2",
"text": " @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: setting the version to 255 will prevent any future reinitialization.\n Emits an {Initialized} event."
},
"id": 170,
"name": "reinitializer",
"nameLocation": "4801:13:2",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 141,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 140,
"mutability": "mutable",
"name": "version",
"nameLocation": "4821:7:2",
"nodeType": "VariableDeclaration",
"scope": 170,
"src": "4815:13:2",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 139,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "4815:5:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"visibility": "internal"
}
],
"src": "4814:15:2"
},
"src": "4792:293:2",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 179,
"nodeType": "Block",
"src": "5323:97:2",
"statements": [
{
"expression": {
"arguments": [
{
"id": 174,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "5341:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420696e697469616c697a696e67",
"id": 175,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5356:45:2",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b",
"typeString": "literal_string \"Initializable: contract is not initializing\""
},
"value": "Initializable: contract is not initializing"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b",
"typeString": "literal_string \"Initializable: contract is not initializing\""
}
],
"id": 173,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "5333:7:2",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 176,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5333:69:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 177,
"nodeType": "ExpressionStatement",
"src": "5333:69:2"
},
{
"id": 178,
"nodeType": "PlaceholderStatement",
"src": "5412:1:2"
}
]
},
"documentation": {
"id": 171,
"nodeType": "StructuredDocumentation",
"src": "5091:199:2",
"text": " @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly."
},
"id": 180,
"name": "onlyInitializing",
"nameLocation": "5304:16:2",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 172,
"nodeType": "ParameterList",
"parameters": [],
"src": "5320:2:2"
},
"src": "5295:125:2",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 215,
"nodeType": "Block",
"src": "5955:231:2",
"statements": [
{
"expression": {
"arguments": [
{
"id": 186,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "5973:14:2",
"subExpression": {
"id": 185,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "5974:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320696e697469616c697a696e67",
"id": 187,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5989:41:2",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a",
"typeString": "literal_string \"Initializable: contract is initializing\""
},
"value": "Initializable: contract is initializing"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a",
"typeString": "literal_string \"Initializable: contract is initializing\""
}
],
"id": 184,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "5965:7:2",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 188,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5965:66:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 189,
"nodeType": "ExpressionStatement",
"src": "5965:66:2"
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 196,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 190,
"name": "_initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 73,
"src": "6045:12:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"expression": {
"arguments": [
{
"id": 193,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "6066:5:2",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint8_$",
"typeString": "type(uint8)"
},
"typeName": {
"id": 192,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "6066:5:2",
"typeDescriptions": {}
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_type$_t_uint8_$",
"typeString": "type(uint8)"
}
],
"id": 191,
"name": "type",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967269,
"src": "6061:4:2",
"typeDescriptions": {
"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
"typeString": "function () pure"
}
},
"id": 194,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6061:11:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_magic_meta_type_t_uint8",
"typeString": "type(uint8)"
}
},
"id": 195,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "max",
"nodeType": "MemberAccess",
"src": "6061:15:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "6045:31:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 214,
"nodeType": "IfStatement",
"src": "6041:139:2",
"trueBody": {
"id": 213,
"nodeType": "Block",
"src": "6078:102:2",
"statements": [
{
"expression": {
"id": 203,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 197,
"name": "_initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 73,
"src": "6092:12:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"expression": {
"arguments": [
{
"id": 200,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "6112:5:2",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint8_$",
"typeString": "type(uint8)"
},
"typeName": {
"id": 199,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "6112:5:2",
"typeDescriptions": {}
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_type$_t_uint8_$",
"typeString": "type(uint8)"
}
],
"id": 198,
"name": "type",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967269,
"src": "6107:4:2",
"typeDescriptions": {
"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
"typeString": "function () pure"
}
},
"id": 201,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6107:11:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_magic_meta_type_t_uint8",
"typeString": "type(uint8)"
}
},
"id": 202,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "max",
"nodeType": "MemberAccess",
"src": "6107:15:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "6092:30:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"id": 204,
"nodeType": "ExpressionStatement",
"src": "6092:30:2"
},
{
"eventCall": {
"arguments": [
{
"expression": {
"arguments": [
{
"id": 208,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "6158:5:2",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint8_$",
"typeString": "type(uint8)"
},
"typeName": {
"id": 207,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "6158:5:2",
"typeDescriptions": {}
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_type$_t_uint8_$",
"typeString": "type(uint8)"
}
],
"id": 206,
"name": "type",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967269,
"src": "6153:4:2",
"typeDescriptions": {
"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
"typeString": "function () pure"
}
},
"id": 209,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6153:11:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_magic_meta_type_t_uint8",
"typeString": "type(uint8)"
}
},
"id": 210,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "max",
"nodeType": "MemberAccess",
"src": "6153:15:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
],
"id": 205,
"name": "Initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 81,
"src": "6141:11:2",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_uint8_$returns$__$",
"typeString": "function (uint8)"
}
},
"id": 211,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6141:28:2",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 212,
"nodeType": "EmitStatement",
"src": "6136:33:2"
}
]
}
}
]
},
"documentation": {
"id": 181,
"nodeType": "StructuredDocumentation",
"src": "5426:475:2",
"text": " @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed."
},
"id": 216,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_disableInitializers",
"nameLocation": "5915:20:2",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 182,
"nodeType": "ParameterList",
"parameters": [],
"src": "5935:2:2"
},
"returnParameters": {
"id": 183,
"nodeType": "ParameterList",
"parameters": [],
"src": "5955:0:2"
},
"scope": 235,
"src": "5906:280:2",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "internal"
},
{
"body": {
"id": 224,
"nodeType": "Block",
"src": "6363:36:2",
"statements": [
{
"expression": {
"id": 222,
"name": "_initialized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 73,
"src": "6380:12:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"functionReturnParameters": 221,
"id": 223,
"nodeType": "Return",
"src": "6373:19:2"
}
]
},
"documentation": {
"id": 217,
"nodeType": "StructuredDocumentation",
"src": "6192:102:2",
"text": " @dev Internal function that returns the initialized version. Returns `_initialized`"
},
"id": 225,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_getInitializedVersion",
"nameLocation": "6308:22:2",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 218,
"nodeType": "ParameterList",
"parameters": [],
"src": "6330:2:2"
},
"returnParameters": {
"id": 221,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 220,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 225,
"src": "6356:5:2",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 219,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "6356:5:2",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"visibility": "internal"
}
],
"src": "6355:7:2"
},
"scope": 235,
"src": "6299:100:2",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 233,
"nodeType": "Block",
"src": "6569:37:2",
"statements": [
{
"expression": {
"id": 231,
"name": "_initializing",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 76,
"src": "6586:13:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 230,
"id": 232,
"nodeType": "Return",
"src": "6579:20:2"
}
]
},
"documentation": {
"id": 226,
"nodeType": "StructuredDocumentation",
"src": "6405:103:2",
"text": " @dev Internal function that returns the initialized version. Returns `_initializing`"
},
"id": 234,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_isInitializing",
"nameLocation": "6522:15:2",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 227,
"nodeType": "ParameterList",
"parameters": [],
"src": "6537:2:2"
},
"returnParameters": {
"id": 230,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 229,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 234,
"src": "6563:4:2",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 228,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "6563:4:2",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "6562:6:2"
},
"scope": 235,
"src": "6513:93:2",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
}
],
"scope": 236,
"src": "2372:4236:2",
"usedErrors": []
}
],
"src": "113:6496:2"
},
"id": 2
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol": {
"ast": {
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol",
"exportedSymbols": {
"Address": [
565
]
},
"id": 566,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 237,
"literals": [
"solidity",
"^",
"0.8",
".1"
],
"nodeType": "PragmaDirective",
"src": "101:23:3"
},
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "library",
"documentation": {
"id": 238,
"nodeType": "StructuredDocumentation",
"src": "126:67:3",
"text": " @dev Collection of functions related to the address type"
},
"fullyImplemented": true,
"id": 565,
"linearizedBaseContracts": [
565
],
"name": "Address",
"nameLocation": "202:7:3",
"nodeType": "ContractDefinition",
"nodes": [
{
"body": {
"id": 252,
"nodeType": "Block",
"src": "1241:254:3",
"statements": [
{
"expression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 250,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"expression": {
"expression": {
"id": 246,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 241,
"src": "1465:7:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 247,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "code",
"nodeType": "MemberAccess",
"src": "1465:12:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"id": 248,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"src": "1465:19:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 249,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1487:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "1465:23:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 245,
"id": 251,
"nodeType": "Return",
"src": "1458:30:3"
}
]
},
"documentation": {
"id": 239,
"nodeType": "StructuredDocumentation",
"src": "216:954:3",
"text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="
},
"id": 253,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isContract",
"nameLocation": "1184:10:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 242,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 241,
"mutability": "mutable",
"name": "account",
"nameLocation": "1203:7:3",
"nodeType": "VariableDeclaration",
"scope": 253,
"src": "1195:15:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 240,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1195:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1194:17:3"
},
"returnParameters": {
"id": 245,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 244,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 253,
"src": "1235:4:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 243,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "1235:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "1234:6:3"
},
"scope": 565,
"src": "1175:320:3",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 286,
"nodeType": "Block",
"src": "2482:241:3",
"statements": [
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 268,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"expression": {
"arguments": [
{
"id": 264,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967268,
"src": "2508:4:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Address_$565",
"typeString": "library Address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_Address_$565",
"typeString": "library Address"
}
],
"id": 263,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2500:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 262,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2500:7:3",
"typeDescriptions": {}
}
},
"id": 265,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2500:13:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 266,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"src": "2500:21:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"id": 267,
"name": "amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 258,
"src": "2525:6:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2500:31:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
"id": 269,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2533:31:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
"typeString": "literal_string \"Address: insufficient balance\""
},
"value": "Address: insufficient balance"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
"typeString": "literal_string \"Address: insufficient balance\""
}
],
"id": 261,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "2492:7:3",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 270,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2492:73:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 271,
"nodeType": "ExpressionStatement",
"src": "2492:73:3"
},
{
"assignments": [
273,
null
],
"declarations": [
{
"constant": false,
"id": 273,
"mutability": "mutable",
"name": "success",
"nameLocation": "2582:7:3",
"nodeType": "VariableDeclaration",
"scope": 286,
"src": "2577:12:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 272,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2577:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
},
null
],
"id": 280,
"initialValue": {
"arguments": [
{
"hexValue": "",
"id": 278,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2625:2:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"typeString": "literal_string \"\""
},
"value": ""
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"typeString": "literal_string \"\""
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"typeString": "literal_string \"\""
}
],
"expression": {
"id": 274,
"name": "recipient",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 256,
"src": "2595:9:3",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 275,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "call",
"nodeType": "MemberAccess",
"src": "2595:14:3",
"typeDescriptions": {
"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
}
},
"id": 277,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"names": [
"value"
],
"nodeType": "FunctionCallOptions",
"options": [
{
"id": 276,
"name": "amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 258,
"src": "2617:6:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"src": "2595:29:3",
"typeDescriptions": {
"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
}
},
"id": 279,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2595:33:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "tuple(bool,bytes memory)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2576:52:3"
},
{
"expression": {
"arguments": [
{
"id": 282,
"name": "success",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 273,
"src": "2646:7:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
"id": 283,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2655:60:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
"typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
},
"value": "Address: unable to send value, recipient may have reverted"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
"typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
}
],
"id": 281,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "2638:7:3",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 284,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2638:78:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 285,
"nodeType": "ExpressionStatement",
"src": "2638:78:3"
}
]
},
"documentation": {
"id": 254,
"nodeType": "StructuredDocumentation",
"src": "1501:905:3",
"text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\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 https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
},
"id": 287,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "sendValue",
"nameLocation": "2420:9:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 259,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 256,
"mutability": "mutable",
"name": "recipient",
"nameLocation": "2446:9:3",
"nodeType": "VariableDeclaration",
"scope": 287,
"src": "2430:25:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 255,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2430:15:3",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 258,
"mutability": "mutable",
"name": "amount",
"nameLocation": "2465:6:3",
"nodeType": "VariableDeclaration",
"scope": 287,
"src": "2457:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 257,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2457:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2429:43:3"
},
"returnParameters": {
"id": 260,
"nodeType": "ParameterList",
"parameters": [],
"src": "2482:0:3"
},
"scope": 565,
"src": "2411:312:3",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 304,
"nodeType": "Block",
"src": "3554:96:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 298,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 290,
"src": "3593:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 299,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 292,
"src": "3601:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"hexValue": "30",
"id": 300,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3607:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
{
"hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
"id": 301,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3610:32:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
"typeString": "literal_string \"Address: low-level call failed\""
},
"value": "Address: low-level call failed"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
{
"typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
"typeString": "literal_string \"Address: low-level call failed\""
}
],
"id": 297,
"name": "functionCallWithValue",
"nodeType": "Identifier",
"overloadedDeclarations": [
345,
389
],
"referencedDeclaration": 389,
"src": "3571:21:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
}
},
"id": 302,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3571:72:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 296,
"id": 303,
"nodeType": "Return",
"src": "3564:79:3"
}
]
},
"documentation": {
"id": 288,
"nodeType": "StructuredDocumentation",
"src": "2729:731:3",
"text": " @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 If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\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 Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
},
"id": 305,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "functionCall",
"nameLocation": "3474:12:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 293,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 290,
"mutability": "mutable",
"name": "target",
"nameLocation": "3495:6:3",
"nodeType": "VariableDeclaration",
"scope": 305,
"src": "3487:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 289,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3487:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 292,
"mutability": "mutable",
"name": "data",
"nameLocation": "3516:4:3",
"nodeType": "VariableDeclaration",
"scope": 305,
"src": "3503:17:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 291,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3503:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "3486:35:3"
},
"returnParameters": {
"id": 296,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 295,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 305,
"src": "3540:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 294,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3540:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "3539:14:3"
},
"scope": 565,
"src": "3465:185:3",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 324,
"nodeType": "Block",
"src": "4019:76:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 318,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 308,
"src": "4058:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 319,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 310,
"src": "4066:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"hexValue": "30",
"id": 320,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4072:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
{
"id": 321,
"name": "errorMessage",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 312,
"src": "4075:12:3",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 317,
"name": "functionCallWithValue",
"nodeType": "Identifier",
"overloadedDeclarations": [
345,
389
],
"referencedDeclaration": 389,
"src": "4036:21:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
}
},
"id": 322,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4036:52:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 316,
"id": 323,
"nodeType": "Return",
"src": "4029:59:3"
}
]
},
"documentation": {
"id": 306,
"nodeType": "StructuredDocumentation",
"src": "3656:211:3",
"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
},
"id": 325,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "functionCall",
"nameLocation": "3881:12:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 313,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 308,
"mutability": "mutable",
"name": "target",
"nameLocation": "3911:6:3",
"nodeType": "VariableDeclaration",
"scope": 325,
"src": "3903:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 307,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3903:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 310,
"mutability": "mutable",
"name": "data",
"nameLocation": "3940:4:3",
"nodeType": "VariableDeclaration",
"scope": 325,
"src": "3927:17:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 309,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "3927:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 312,
"mutability": "mutable",
"name": "errorMessage",
"nameLocation": "3968:12:3",
"nodeType": "VariableDeclaration",
"scope": 325,
"src": "3954:26:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 311,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "3954:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "3893:93:3"
},
"returnParameters": {
"id": 316,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 315,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 325,
"src": "4005:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 314,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "4005:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "4004:14:3"
},
"scope": 565,
"src": "3872:223:3",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 344,
"nodeType": "Block",
"src": "4600:111:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 338,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 328,
"src": "4639:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 339,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 330,
"src": "4647:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"id": 340,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 332,
"src": "4653:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
"id": 341,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4660:43:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
"typeString": "literal_string \"Address: low-level call with value failed\""
},
"value": "Address: low-level call with value failed"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
"typeString": "literal_string \"Address: low-level call with value failed\""
}
],
"id": 337,
"name": "functionCallWithValue",
"nodeType": "Identifier",
"overloadedDeclarations": [
345,
389
],
"referencedDeclaration": 389,
"src": "4617:21:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
}
},
"id": 342,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4617:87:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 336,
"id": 343,
"nodeType": "Return",
"src": "4610:94:3"
}
]
},
"documentation": {
"id": 326,
"nodeType": "StructuredDocumentation",
"src": "4101:351:3",
"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
},
"id": 345,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "functionCallWithValue",
"nameLocation": "4466:21:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 333,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 328,
"mutability": "mutable",
"name": "target",
"nameLocation": "4505:6:3",
"nodeType": "VariableDeclaration",
"scope": 345,
"src": "4497:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 327,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4497:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 330,
"mutability": "mutable",
"name": "data",
"nameLocation": "4534:4:3",
"nodeType": "VariableDeclaration",
"scope": 345,
"src": "4521:17:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 329,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "4521:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 332,
"mutability": "mutable",
"name": "value",
"nameLocation": "4556:5:3",
"nodeType": "VariableDeclaration",
"scope": 345,
"src": "4548:13:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 331,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4548:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "4487:80:3"
},
"returnParameters": {
"id": 336,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 335,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 345,
"src": "4586:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 334,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "4586:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "4585:14:3"
},
"scope": 565,
"src": "4457:254:3",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 388,
"nodeType": "Block",
"src": "5138:267:3",
"statements": [
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 366,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"expression": {
"arguments": [
{
"id": 362,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967268,
"src": "5164:4:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Address_$565",
"typeString": "library Address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_Address_$565",
"typeString": "library Address"
}
],
"id": 361,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "5156:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 360,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5156:7:3",
"typeDescriptions": {}
}
},
"id": 363,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5156:13:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 364,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"src": "5156:21:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"id": 365,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 352,
"src": "5181:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5156:30:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
"id": 367,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5188:40:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
"typeString": "literal_string \"Address: insufficient balance for call\""
},
"value": "Address: insufficient balance for call"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
"typeString": "literal_string \"Address: insufficient balance for call\""
}
],
"id": 359,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "5148:7:3",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 368,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5148:81:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 369,
"nodeType": "ExpressionStatement",
"src": "5148:81:3"
},
{
"assignments": [
371,
373
],
"declarations": [
{
"constant": false,
"id": 371,
"mutability": "mutable",
"name": "success",
"nameLocation": "5245:7:3",
"nodeType": "VariableDeclaration",
"scope": 388,
"src": "5240:12:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 370,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "5240:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 373,
"mutability": "mutable",
"name": "returndata",
"nameLocation": "5267:10:3",
"nodeType": "VariableDeclaration",
"scope": 388,
"src": "5254:23:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 372,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "5254:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"id": 380,
"initialValue": {
"arguments": [
{
"id": 378,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 350,
"src": "5307:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"expression": {
"id": 374,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 348,
"src": "5281:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 375,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "call",
"nodeType": "MemberAccess",
"src": "5281:11:3",
"typeDescriptions": {
"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
}
},
"id": 377,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"names": [
"value"
],
"nodeType": "FunctionCallOptions",
"options": [
{
"id": 376,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 352,
"src": "5300:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"src": "5281:25:3",
"typeDescriptions": {
"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
}
},
"id": 379,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5281:31:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "tuple(bool,bytes memory)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "5239:73:3"
},
{
"expression": {
"arguments": [
{
"id": 382,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 348,
"src": "5356:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 383,
"name": "success",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 371,
"src": "5364:7:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"id": 384,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 373,
"src": "5373:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"id": 385,
"name": "errorMessage",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 354,
"src": "5385:12:3",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 381,
"name": "verifyCallResultFromTarget",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 520,
"src": "5329:26:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)"
}
},
"id": 386,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5329:69:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 358,
"id": 387,
"nodeType": "Return",
"src": "5322:76:3"
}
]
},
"documentation": {
"id": 346,
"nodeType": "StructuredDocumentation",
"src": "4717:237:3",
"text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
},
"id": 389,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "functionCallWithValue",
"nameLocation": "4968:21:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 355,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 348,
"mutability": "mutable",
"name": "target",
"nameLocation": "5007:6:3",
"nodeType": "VariableDeclaration",
"scope": 389,
"src": "4999:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 347,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4999:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 350,
"mutability": "mutable",
"name": "data",
"nameLocation": "5036:4:3",
"nodeType": "VariableDeclaration",
"scope": 389,
"src": "5023:17:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 349,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "5023:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 352,
"mutability": "mutable",
"name": "value",
"nameLocation": "5058:5:3",
"nodeType": "VariableDeclaration",
"scope": 389,
"src": "5050:13:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 351,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5050:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 354,
"mutability": "mutable",
"name": "errorMessage",
"nameLocation": "5087:12:3",
"nodeType": "VariableDeclaration",
"scope": 389,
"src": "5073:26:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 353,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "5073:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "4989:116:3"
},
"returnParameters": {
"id": 358,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 357,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 389,
"src": "5124:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 356,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "5124:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "5123:14:3"
},
"scope": 565,
"src": "4959:446:3",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 405,
"nodeType": "Block",
"src": "5682:97:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 400,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 392,
"src": "5718:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 401,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 394,
"src": "5726:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
"id": 402,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5732:39:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
"typeString": "literal_string \"Address: low-level static call failed\""
},
"value": "Address: low-level static call failed"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
"typeString": "literal_string \"Address: low-level static call failed\""
}
],
"id": 399,
"name": "functionStaticCall",
"nodeType": "Identifier",
"overloadedDeclarations": [
406,
435
],
"referencedDeclaration": 435,
"src": "5699:18:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
}
},
"id": 403,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5699:73:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 398,
"id": 404,
"nodeType": "Return",
"src": "5692:80:3"
}
]
},
"documentation": {
"id": 390,
"nodeType": "StructuredDocumentation",
"src": "5411:166:3",
"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
},
"id": 406,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "functionStaticCall",
"nameLocation": "5591:18:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 395,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 392,
"mutability": "mutable",
"name": "target",
"nameLocation": "5618:6:3",
"nodeType": "VariableDeclaration",
"scope": 406,
"src": "5610:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 391,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5610:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 394,
"mutability": "mutable",
"name": "data",
"nameLocation": "5639:4:3",
"nodeType": "VariableDeclaration",
"scope": 406,
"src": "5626:17:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 393,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "5626:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "5609:35:3"
},
"returnParameters": {
"id": 398,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 397,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 406,
"src": "5668:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 396,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "5668:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "5667:14:3"
},
"scope": 565,
"src": "5582:197:3",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 434,
"nodeType": "Block",
"src": "6121:168:3",
"statements": [
{
"assignments": [
419,
421
],
"declarations": [
{
"constant": false,
"id": 419,
"mutability": "mutable",
"name": "success",
"nameLocation": "6137:7:3",
"nodeType": "VariableDeclaration",
"scope": 434,
"src": "6132:12:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 418,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "6132:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 421,
"mutability": "mutable",
"name": "returndata",
"nameLocation": "6159:10:3",
"nodeType": "VariableDeclaration",
"scope": 434,
"src": "6146:23:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 420,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "6146:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"id": 426,
"initialValue": {
"arguments": [
{
"id": 424,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 411,
"src": "6191:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"expression": {
"id": 422,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 409,
"src": "6173:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 423,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "staticcall",
"nodeType": "MemberAccess",
"src": "6173:17:3",
"typeDescriptions": {
"typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "function (bytes memory) view returns (bool,bytes memory)"
}
},
"id": 425,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6173:23:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "tuple(bool,bytes memory)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "6131:65:3"
},
{
"expression": {
"arguments": [
{
"id": 428,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 409,
"src": "6240:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 429,
"name": "success",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 419,
"src": "6248:7:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"id": 430,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 421,
"src": "6257:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"id": 431,
"name": "errorMessage",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 413,
"src": "6269:12:3",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 427,
"name": "verifyCallResultFromTarget",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 520,
"src": "6213:26:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)"
}
},
"id": 432,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6213:69:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 417,
"id": 433,
"nodeType": "Return",
"src": "6206:76:3"
}
]
},
"documentation": {
"id": 407,
"nodeType": "StructuredDocumentation",
"src": "5785:173:3",
"text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
},
"id": 435,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "functionStaticCall",
"nameLocation": "5972:18:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 414,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 409,
"mutability": "mutable",
"name": "target",
"nameLocation": "6008:6:3",
"nodeType": "VariableDeclaration",
"scope": 435,
"src": "6000:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 408,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6000:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 411,
"mutability": "mutable",
"name": "data",
"nameLocation": "6037:4:3",
"nodeType": "VariableDeclaration",
"scope": 435,
"src": "6024:17:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 410,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "6024:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 413,
"mutability": "mutable",
"name": "errorMessage",
"nameLocation": "6065:12:3",
"nodeType": "VariableDeclaration",
"scope": 435,
"src": "6051:26:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 412,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "6051:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "5990:93:3"
},
"returnParameters": {
"id": 417,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 416,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 435,
"src": "6107:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 415,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "6107:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "6106:14:3"
},
"scope": 565,
"src": "5963:326:3",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 451,
"nodeType": "Block",
"src": "6565:101:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 446,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 438,
"src": "6603:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 447,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 440,
"src": "6611:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
"id": 448,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6617:41:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
"typeString": "literal_string \"Address: low-level delegate call failed\""
},
"value": "Address: low-level delegate call failed"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
"typeString": "literal_string \"Address: low-level delegate call failed\""
}
],
"id": 445,
"name": "functionDelegateCall",
"nodeType": "Identifier",
"overloadedDeclarations": [
452,
481
],
"referencedDeclaration": 481,
"src": "6582:20:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
}
},
"id": 449,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6582:77:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 444,
"id": 450,
"nodeType": "Return",
"src": "6575:84:3"
}
]
},
"documentation": {
"id": 436,
"nodeType": "StructuredDocumentation",
"src": "6295:168:3",
"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
},
"id": 452,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "functionDelegateCall",
"nameLocation": "6477:20:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 441,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 438,
"mutability": "mutable",
"name": "target",
"nameLocation": "6506:6:3",
"nodeType": "VariableDeclaration",
"scope": 452,
"src": "6498:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 437,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6498:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 440,
"mutability": "mutable",
"name": "data",
"nameLocation": "6527:4:3",
"nodeType": "VariableDeclaration",
"scope": 452,
"src": "6514:17:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 439,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "6514:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "6497:35:3"
},
"returnParameters": {
"id": 444,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 443,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 452,
"src": "6551:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 442,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "6551:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "6550:14:3"
},
"scope": 565,
"src": "6468:198:3",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 480,
"nodeType": "Block",
"src": "7007:170:3",
"statements": [
{
"assignments": [
465,
467
],
"declarations": [
{
"constant": false,
"id": 465,
"mutability": "mutable",
"name": "success",
"nameLocation": "7023:7:3",
"nodeType": "VariableDeclaration",
"scope": 480,
"src": "7018:12:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 464,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "7018:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 467,
"mutability": "mutable",
"name": "returndata",
"nameLocation": "7045:10:3",
"nodeType": "VariableDeclaration",
"scope": 480,
"src": "7032:23:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 466,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "7032:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"id": 472,
"initialValue": {
"arguments": [
{
"id": 470,
"name": "data",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 457,
"src": "7079:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"expression": {
"id": 468,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 455,
"src": "7059:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"id": 469,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "delegatecall",
"nodeType": "MemberAccess",
"src": "7059:19:3",
"typeDescriptions": {
"typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "function (bytes memory) returns (bool,bytes memory)"
}
},
"id": 471,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7059:25:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
"typeString": "tuple(bool,bytes memory)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "7017:67:3"
},
{
"expression": {
"arguments": [
{
"id": 474,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 455,
"src": "7128:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"id": 475,
"name": "success",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 465,
"src": "7136:7:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"id": 476,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 467,
"src": "7145:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"id": 477,
"name": "errorMessage",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 459,
"src": "7157:12:3",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 473,
"name": "verifyCallResultFromTarget",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 520,
"src": "7101:26:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)"
}
},
"id": 478,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7101:69:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 463,
"id": 479,
"nodeType": "Return",
"src": "7094:76:3"
}
]
},
"documentation": {
"id": 453,
"nodeType": "StructuredDocumentation",
"src": "6672:175:3",
"text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
},
"id": 481,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "functionDelegateCall",
"nameLocation": "6861:20:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 460,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 455,
"mutability": "mutable",
"name": "target",
"nameLocation": "6899:6:3",
"nodeType": "VariableDeclaration",
"scope": 481,
"src": "6891:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 454,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6891:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 457,
"mutability": "mutable",
"name": "data",
"nameLocation": "6928:4:3",
"nodeType": "VariableDeclaration",
"scope": 481,
"src": "6915:17:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 456,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "6915:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 459,
"mutability": "mutable",
"name": "errorMessage",
"nameLocation": "6956:12:3",
"nodeType": "VariableDeclaration",
"scope": 481,
"src": "6942:26:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 458,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "6942:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "6881:93:3"
},
"returnParameters": {
"id": 463,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 462,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 481,
"src": "6993:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 461,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "6993:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "6992:14:3"
},
"scope": 565,
"src": "6852:325:3",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 519,
"nodeType": "Block",
"src": "7659:434:3",
"statements": [
{
"condition": {
"id": 495,
"name": "success",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 486,
"src": "7673:7:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"id": 517,
"nodeType": "Block",
"src": "8029:58:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 513,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 488,
"src": "8051:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"id": 514,
"name": "errorMessage",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 490,
"src": "8063:12:3",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 512,
"name": "_revert",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 564,
"src": "8043:7:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bytes memory,string memory) pure"
}
},
"id": 515,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8043:33:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 516,
"nodeType": "ExpressionStatement",
"src": "8043:33:3"
}
]
},
"id": 518,
"nodeType": "IfStatement",
"src": "7669:418:3",
"trueBody": {
"id": 511,
"nodeType": "Block",
"src": "7682:341:3",
"statements": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 499,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"expression": {
"id": 496,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 488,
"src": "7700:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"id": 497,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"src": "7700:17:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 498,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7721:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "7700:22:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 508,
"nodeType": "IfStatement",
"src": "7696:286:3",
"trueBody": {
"id": 507,
"nodeType": "Block",
"src": "7724:258:3",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"id": 502,
"name": "target",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 484,
"src": "7926:6:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 501,
"name": "isContract",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 253,
"src": "7915:10:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
"typeString": "function (address) view returns (bool)"
}
},
"id": 503,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7915:18:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
"id": 504,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7935:31:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
"typeString": "literal_string \"Address: call to non-contract\""
},
"value": "Address: call to non-contract"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
"typeString": "literal_string \"Address: call to non-contract\""
}
],
"id": 500,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "7907:7:3",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 505,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7907:60:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 506,
"nodeType": "ExpressionStatement",
"src": "7907:60:3"
}
]
}
},
{
"expression": {
"id": 509,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 488,
"src": "8002:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 494,
"id": 510,
"nodeType": "Return",
"src": "7995:17:3"
}
]
}
}
]
},
"documentation": {
"id": 482,
"nodeType": "StructuredDocumentation",
"src": "7183:277:3",
"text": " @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"
},
"id": 520,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "verifyCallResultFromTarget",
"nameLocation": "7474:26:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 491,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 484,
"mutability": "mutable",
"name": "target",
"nameLocation": "7518:6:3",
"nodeType": "VariableDeclaration",
"scope": 520,
"src": "7510:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 483,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "7510:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 486,
"mutability": "mutable",
"name": "success",
"nameLocation": "7539:7:3",
"nodeType": "VariableDeclaration",
"scope": 520,
"src": "7534:12:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 485,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "7534:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 488,
"mutability": "mutable",
"name": "returndata",
"nameLocation": "7569:10:3",
"nodeType": "VariableDeclaration",
"scope": 520,
"src": "7556:23:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 487,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "7556:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 490,
"mutability": "mutable",
"name": "errorMessage",
"nameLocation": "7603:12:3",
"nodeType": "VariableDeclaration",
"scope": 520,
"src": "7589:26:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 489,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "7589:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "7500:121:3"
},
"returnParameters": {
"id": 494,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 493,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 520,
"src": "7645:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 492,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "7645:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "7644:14:3"
},
"scope": 565,
"src": "7465:628:3",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 543,
"nodeType": "Block",
"src": "8474:135:3",
"statements": [
{
"condition": {
"id": 532,
"name": "success",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 523,
"src": "8488:7:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"id": 541,
"nodeType": "Block",
"src": "8545:58:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 537,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 525,
"src": "8567:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
{
"id": 538,
"name": "errorMessage",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 527,
"src": "8579:12:3",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
},
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 536,
"name": "_revert",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 564,
"src": "8559:7:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bytes memory,string memory) pure"
}
},
"id": 539,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8559:33:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 540,
"nodeType": "ExpressionStatement",
"src": "8559:33:3"
}
]
},
"id": 542,
"nodeType": "IfStatement",
"src": "8484:119:3",
"trueBody": {
"id": 535,
"nodeType": "Block",
"src": "8497:42:3",
"statements": [
{
"expression": {
"id": 533,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 525,
"src": "8518:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"functionReturnParameters": 531,
"id": 534,
"nodeType": "Return",
"src": "8511:17:3"
}
]
}
}
]
},
"documentation": {
"id": 521,
"nodeType": "StructuredDocumentation",
"src": "8099:210:3",
"text": " @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"
},
"id": 544,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "verifyCallResult",
"nameLocation": "8323:16:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 528,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 523,
"mutability": "mutable",
"name": "success",
"nameLocation": "8354:7:3",
"nodeType": "VariableDeclaration",
"scope": 544,
"src": "8349:12:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 522,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "8349:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 525,
"mutability": "mutable",
"name": "returndata",
"nameLocation": "8384:10:3",
"nodeType": "VariableDeclaration",
"scope": 544,
"src": "8371:23:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 524,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "8371:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 527,
"mutability": "mutable",
"name": "errorMessage",
"nameLocation": "8418:12:3",
"nodeType": "VariableDeclaration",
"scope": 544,
"src": "8404:26:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 526,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "8404:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "8339:97:3"
},
"returnParameters": {
"id": 531,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 530,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 544,
"src": "8460:12:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 529,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "8460:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "8459:14:3"
},
"scope": 565,
"src": "8314:295:3",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 563,
"nodeType": "Block",
"src": "8698:457:3",
"statements": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 554,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"expression": {
"id": 551,
"name": "returndata",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 546,
"src": "8774:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"id": 552,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"src": "8774:17:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 553,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8794:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "8774:21:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"id": 561,
"nodeType": "Block",
"src": "9104:45:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 558,
"name": "errorMessage",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 548,
"src": "9125:12:3",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 557,
"name": "revert",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967277,
4294967277
],
"referencedDeclaration": 4294967277,
"src": "9118:6:3",
"typeDescriptions": {
"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
"typeString": "function (string memory) pure"
}
},
"id": 559,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9118:20:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 560,
"nodeType": "ExpressionStatement",
"src": "9118:20:3"
}
]
},
"id": 562,
"nodeType": "IfStatement",
"src": "8770:379:3",
"trueBody": {
"id": 556,
"nodeType": "Block",
"src": "8797:301:3",
"statements": [
{
"AST": {
"nodeType": "YulBlock",
"src": "8955:133:3",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "8973:40:3",
"value": {
"arguments": [
{
"name": "returndata",
"nodeType": "YulIdentifier",
"src": "9002:10:3"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "8996:5:3"
},
"nodeType": "YulFunctionCall",
"src": "8996:17:3"
},
"variables": [
{
"name": "returndata_size",
"nodeType": "YulTypedName",
"src": "8977:15:3",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9041:2:3",
"type": "",
"value": "32"
},
{
"name": "returndata",
"nodeType": "YulIdentifier",
"src": "9045:10:3"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9037:3:3"
},
"nodeType": "YulFunctionCall",
"src": "9037:19:3"
},
{
"name": "returndata_size",
"nodeType": "YulIdentifier",
"src": "9058:15:3"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "9030:6:3"
},
"nodeType": "YulFunctionCall",
"src": "9030:44:3"
},
"nodeType": "YulExpressionStatement",
"src": "9030:44:3"
}
]
},
"documentation": "@solidity memory-safe-assembly",
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 546,
"isOffset": false,
"isSlot": false,
"src": "9002:10:3",
"valueSize": 1
},
{
"declaration": 546,
"isOffset": false,
"isSlot": false,
"src": "9045:10:3",
"valueSize": 1
}
],
"id": 555,
"nodeType": "InlineAssembly",
"src": "8946:142:3"
}
]
}
}
]
},
"id": 564,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_revert",
"nameLocation": "8624:7:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 549,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 546,
"mutability": "mutable",
"name": "returndata",
"nameLocation": "8645:10:3",
"nodeType": "VariableDeclaration",
"scope": 564,
"src": "8632:23:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 545,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "8632:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 548,
"mutability": "mutable",
"name": "errorMessage",
"nameLocation": "8671:12:3",
"nodeType": "VariableDeclaration",
"scope": 564,
"src": "8657:26:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 547,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "8657:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "8631:53:3"
},
"returnParameters": {
"id": 550,
"nodeType": "ParameterList",
"parameters": [],
"src": "8698:0:3"
},
"scope": 565,
"src": "8615:540:3",
"stateMutability": "pure",
"virtual": false,
"visibility": "private"
}
],
"scope": 566,
"src": "194:8963:3",
"usedErrors": []
}
],
"src": "101:9057:3"
},
"id": 3
}
}
}
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "608060405234801561001057600080fd5b5061034d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61004a60048036038101906100459190610106565b610060565b6040516100579190610190565b60405180910390f35b600063150b7a0260e01b9050949350505050565b6000610087610082846101d0565b6101ab565b90508281526020810184848401111561009f57600080fd5b6100aa848285610269565b509392505050565b6000813590506100c1816102e9565b92915050565b600082601f8301126100d857600080fd5b81356100e8848260208601610074565b91505092915050565b60008135905061010081610300565b92915050565b6000806000806080858703121561011c57600080fd5b600061012a878288016100b2565b945050602061013b878288016100b2565b935050604061014c878288016100f1565b925050606085013567ffffffffffffffff81111561016957600080fd5b610175878288016100c7565b91505092959194509250565b61018a81610213565b82525050565b60006020820190506101a56000830184610181565b92915050565b60006101b56101c6565b90506101c18282610278565b919050565b6000604051905090565b600067ffffffffffffffff8211156101eb576101ea6102a9565b5b6101f4826102d8565b9050602081019050919050565b600061020c8261023f565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b610281826102d8565b810181811067ffffffffffffffff821117156102a05761029f6102a9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6102f281610201565b81146102fd57600080fd5b50565b6103098161025f565b811461031457600080fd5b5056fea2646970667358221220cc98a2abed81e1492dd64fbea2da837f4ffcc94d267efa7c3a3e7d19d4100c8764736f6c63430008040033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x190 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH4 0x150B7A02 PUSH1 0xE0 SHL SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x87 PUSH2 0x82 DUP5 PUSH2 0x1D0 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAA DUP5 DUP3 DUP6 PUSH2 0x269 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC1 DUP2 PUSH2 0x2E9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE8 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x74 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x100 DUP2 PUSH2 0x300 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x12A DUP8 DUP3 DUP9 ADD PUSH2 0xB2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x13B DUP8 DUP3 DUP9 ADD PUSH2 0xB2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x14C DUP8 DUP3 DUP9 ADD PUSH2 0xF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x175 DUP8 DUP3 DUP9 ADD PUSH2 0xC7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x18A DUP2 PUSH2 0x213 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1A5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x181 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B5 PUSH2 0x1C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1C1 DUP3 DUP3 PUSH2 0x278 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1EB JUMPI PUSH2 0x1EA PUSH2 0x2A9 JUMP JUMPDEST JUMPDEST PUSH2 0x1F4 DUP3 PUSH2 0x2D8 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20C DUP3 PUSH2 0x23F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH2 0x281 DUP3 PUSH2 0x2D8 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2A0 JUMPI PUSH2 0x29F PUSH2 0x2A9 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2F2 DUP2 PUSH2 0x201 JUMP JUMPDEST DUP2 EQ PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x309 DUP2 PUSH2 0x25F JUMP JUMPDEST DUP2 EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC SWAP9 LOG2 0xAB 0xED DUP2 0xE1 0x49 0x2D 0xD6 0x4F 0xBE LOG2 0xDA DUP4 PUSH32 0x4FFCC94D267EFA7C3A3E7D19D4100C8764736F6C634300080400330000000000 ",
"sourceMap": "466:639:0:-:0;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:4091:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "90:260:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "100:74:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "166:6:4"
}
],
"functionName": {
"name": "array_allocation_size_t_bytes_memory_ptr",
"nodeType": "YulIdentifier",
"src": "125:40:4"
},
"nodeType": "YulFunctionCall",
"src": "125:48:4"
}
],
"functionName": {
"name": "allocate_memory",
"nodeType": "YulIdentifier",
"src": "109:15:4"
},
"nodeType": "YulFunctionCall",
"src": "109:65:4"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "100:5:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "190:5:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "197:6:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "183:6:4"
},
"nodeType": "YulFunctionCall",
"src": "183:21:4"
},
"nodeType": "YulExpressionStatement",
"src": "183:21:4"
},
{
"nodeType": "YulVariableDeclaration",
"src": "213:27:4",
"value": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "228:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "235:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "224:3:4"
},
"nodeType": "YulFunctionCall",
"src": "224:16:4"
},
"variables": [
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "217:3:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "278:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "287:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "290:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "280:6:4"
},
"nodeType": "YulFunctionCall",
"src": "280:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "280:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "259:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "264:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "255:3:4"
},
"nodeType": "YulFunctionCall",
"src": "255:16:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "273:3:4"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "252:2:4"
},
"nodeType": "YulFunctionCall",
"src": "252:25:4"
},
"nodeType": "YulIf",
"src": "249:2:4"
},
{
"expression": {
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "327:3:4"
},
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "332:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "337:6:4"
}
],
"functionName": {
"name": "copy_calldata_to_memory",
"nodeType": "YulIdentifier",
"src": "303:23:4"
},
"nodeType": "YulFunctionCall",
"src": "303:41:4"
},
"nodeType": "YulExpressionStatement",
"src": "303:41:4"
}
]
},
"name": "abi_decode_available_length_t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "63:3:4",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "68:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "76:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "84:5:4",
"type": ""
}
],
"src": "7:343:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "408:87:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "418:29:4",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "440:6:4"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "427:12:4"
},
"nodeType": "YulFunctionCall",
"src": "427:20:4"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "418:5:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "483:5:4"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "456:26:4"
},
"nodeType": "YulFunctionCall",
"src": "456:33:4"
},
"nodeType": "YulExpressionStatement",
"src": "456:33:4"
}
]
},
"name": "abi_decode_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "386:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "394:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "402:5:4",
"type": ""
}
],
"src": "356:139:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "575:210:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "624:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "633:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "636:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "626:6:4"
},
"nodeType": "YulFunctionCall",
"src": "626:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "626:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "603:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "611:4:4",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "599:3:4"
},
"nodeType": "YulFunctionCall",
"src": "599:17:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "618:3:4"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "595:3:4"
},
"nodeType": "YulFunctionCall",
"src": "595:27:4"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "588:6:4"
},
"nodeType": "YulFunctionCall",
"src": "588:35:4"
},
"nodeType": "YulIf",
"src": "585:2:4"
},
{
"nodeType": "YulVariableDeclaration",
"src": "649:34:4",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "676:6:4"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "663:12:4"
},
"nodeType": "YulFunctionCall",
"src": "663:20:4"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "653:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "692:87:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "752:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "760:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "748:3:4"
},
"nodeType": "YulFunctionCall",
"src": "748:17:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "767:6:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "775:3:4"
}
],
"functionName": {
"name": "abi_decode_available_length_t_bytes_memory_ptr",
"nodeType": "YulIdentifier",
"src": "701:46:4"
},
"nodeType": "YulFunctionCall",
"src": "701:78:4"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "692:5:4"
}
]
}
]
},
"name": "abi_decode_t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "553:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "561:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "569:5:4",
"type": ""
}
],
"src": "514:271:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "843:87:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "853:29:4",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "875:6:4"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "862:12:4"
},
"nodeType": "YulFunctionCall",
"src": "862:20:4"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "853:5:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "918:5:4"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nodeType": "YulIdentifier",
"src": "891:26:4"
},
"nodeType": "YulFunctionCall",
"src": "891:33:4"
},
"nodeType": "YulExpressionStatement",
"src": "891:33:4"
}
]
},
"name": "abi_decode_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "821:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "829:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "837:5:4",
"type": ""
}
],
"src": "791:139:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1062:683:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1109:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1118:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1121:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1111:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1111:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "1111:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1083:7:4"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1092:9:4"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "1079:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1079:23:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1104:3:4",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "1075:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1075:33:4"
},
"nodeType": "YulIf",
"src": "1072:2:4"
},
{
"nodeType": "YulBlock",
"src": "1135:117:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1150:15:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1164:1:4",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1154:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1179:63:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1214:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1225:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1210:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1210:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1234:7:4"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "1189:20:4"
},
"nodeType": "YulFunctionCall",
"src": "1189:53:4"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1179:6:4"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "1262:118:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1277:16:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1291:2:4",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1281:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1307:63:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1342:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1353:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1338:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1338:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1362:7:4"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "1317:20:4"
},
"nodeType": "YulFunctionCall",
"src": "1317:53:4"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "1307:6:4"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "1390:118:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1405:16:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1419:2:4",
"type": "",
"value": "64"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1409:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1435:63:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1470:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1481:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1466:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1466:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1490:7:4"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "1445:20:4"
},
"nodeType": "YulFunctionCall",
"src": "1445:53:4"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "1435:6:4"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "1518:220:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1533:46:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1564:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1575:2:4",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1560:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1560:18:4"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1547:12:4"
},
"nodeType": "YulFunctionCall",
"src": "1547:32:4"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1537:6:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1626:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1635:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1638:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1628:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1628:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "1628:12:4"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1598:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1606:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "1595:2:4"
},
"nodeType": "YulFunctionCall",
"src": "1595:30:4"
},
"nodeType": "YulIf",
"src": "1592:2:4"
},
{
"nodeType": "YulAssignment",
"src": "1656:72:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1700:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1711:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1696:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1696:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1720:7:4"
}
],
"functionName": {
"name": "abi_decode_t_bytes_memory_ptr",
"nodeType": "YulIdentifier",
"src": "1666:29:4"
},
"nodeType": "YulFunctionCall",
"src": "1666:62:4"
},
"variableNames": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "1656:6:4"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1008:9:4",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "1019:7:4",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1031:6:4",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "1039:6:4",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "1047:6:4",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "1055:6:4",
"type": ""
}
],
"src": "936:809:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1814:52:4",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1831:3:4"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1853:5:4"
}
],
"functionName": {
"name": "cleanup_t_bytes4",
"nodeType": "YulIdentifier",
"src": "1836:16:4"
},
"nodeType": "YulFunctionCall",
"src": "1836:23:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1824:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1824:36:4"
},
"nodeType": "YulExpressionStatement",
"src": "1824:36:4"
}
]
},
"name": "abi_encode_t_bytes4_to_t_bytes4_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1802:5:4",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "1809:3:4",
"type": ""
}
],
"src": "1751:115:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1968:122:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1978:26:4",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1990:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2001:2:4",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1986:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1986:18:4"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "1978:4:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2056:6:4"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2069:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2080:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2065:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2065:17:4"
}
],
"functionName": {
"name": "abi_encode_t_bytes4_to_t_bytes4_fromStack",
"nodeType": "YulIdentifier",
"src": "2014:41:4"
},
"nodeType": "YulFunctionCall",
"src": "2014:69:4"
},
"nodeType": "YulExpressionStatement",
"src": "2014:69:4"
}
]
},
"name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1940:9:4",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1952:6:4",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "1963:4:4",
"type": ""
}
],
"src": "1872:218:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2137:88:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2147:30:4",
"value": {
"arguments": [],
"functionName": {
"name": "allocate_unbounded",
"nodeType": "YulIdentifier",
"src": "2157:18:4"
},
"nodeType": "YulFunctionCall",
"src": "2157:20:4"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "2147:6:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "2206:6:4"
},
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "2214:4:4"
}
],
"functionName": {
"name": "finalize_allocation",
"nodeType": "YulIdentifier",
"src": "2186:19:4"
},
"nodeType": "YulFunctionCall",
"src": "2186:33:4"
},
"nodeType": "YulExpressionStatement",
"src": "2186:33:4"
}
]
},
"name": "allocate_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "2121:4:4",
"type": ""
}
],
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "2130:6:4",
"type": ""
}
],
"src": "2096:129:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2271:35:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2281:19:4",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2297:2:4",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2291:5:4"
},
"nodeType": "YulFunctionCall",
"src": "2291:9:4"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "2281:6:4"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "2264:6:4",
"type": ""
}
],
"src": "2231:75:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2378:241:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2483:22:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "2485:16:4"
},
"nodeType": "YulFunctionCall",
"src": "2485:18:4"
},
"nodeType": "YulExpressionStatement",
"src": "2485:18:4"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2455:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2463:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2452:2:4"
},
"nodeType": "YulFunctionCall",
"src": "2452:30:4"
},
"nodeType": "YulIf",
"src": "2449:2:4"
},
{
"nodeType": "YulAssignment",
"src": "2515:37:4",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2545:6:4"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "2523:21:4"
},
"nodeType": "YulFunctionCall",
"src": "2523:29:4"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "2515:4:4"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2589:23:4",
"value": {
"arguments": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "2601:4:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2607:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2597:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2597:15:4"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "2589:4:4"
}
]
}
]
},
"name": "array_allocation_size_t_bytes_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "2362:6:4",
"type": ""
}
],
"returnVariables": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "2373:4:4",
"type": ""
}
],
"src": "2312:307:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2670:51:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2680:35:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2709:5:4"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nodeType": "YulIdentifier",
"src": "2691:17:4"
},
"nodeType": "YulFunctionCall",
"src": "2691:24:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "2680:7:4"
}
]
}
]
},
"name": "cleanup_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2652:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "2662:7:4",
"type": ""
}
],
"src": "2625:96:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2771:105:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2781:89:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2796:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2803:66:4",
"type": "",
"value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "2792:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2792:78:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "2781:7:4"
}
]
}
]
},
"name": "cleanup_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2753:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "2763:7:4",
"type": ""
}
],
"src": "2727:149:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2927:81:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2937:65:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2952:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2959:42:4",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "2948:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2948:54:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "2937:7:4"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2909:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "2919:7:4",
"type": ""
}
],
"src": "2882:126:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3059:32:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3069:16:4",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "3080:5:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "3069:7:4"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3041:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "3051:7:4",
"type": ""
}
],
"src": "3014:77:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3148:103:4",
"statements": [
{
"expression": {
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "3171:3:4"
},
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "3176:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3181:6:4"
}
],
"functionName": {
"name": "calldatacopy",
"nodeType": "YulIdentifier",
"src": "3158:12:4"
},
"nodeType": "YulFunctionCall",
"src": "3158:30:4"
},
"nodeType": "YulExpressionStatement",
"src": "3158:30:4"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "3229:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3234:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3225:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3225:16:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3243:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3218:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3218:27:4"
},
"nodeType": "YulExpressionStatement",
"src": "3218:27:4"
}
]
},
"name": "copy_calldata_to_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "3130:3:4",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "3135:3:4",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3140:6:4",
"type": ""
}
],
"src": "3097:154:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3300:238:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3310:58:4",
"value": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "3332:6:4"
},
{
"arguments": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "3362:4:4"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "3340:21:4"
},
"nodeType": "YulFunctionCall",
"src": "3340:27:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3328:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3328:40:4"
},
"variables": [
{
"name": "newFreePtr",
"nodeType": "YulTypedName",
"src": "3314:10:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3479:22:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "3481:16:4"
},
"nodeType": "YulFunctionCall",
"src": "3481:18:4"
},
"nodeType": "YulExpressionStatement",
"src": "3481:18:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "3422:10:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3434:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "3419:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3419:34:4"
},
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "3458:10:4"
},
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "3470:6:4"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "3455:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3455:22:4"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "3416:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3416:62:4"
},
"nodeType": "YulIf",
"src": "3413:2:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3517:2:4",
"type": "",
"value": "64"
},
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "3521:10:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3510:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3510:22:4"
},
"nodeType": "YulExpressionStatement",
"src": "3510:22:4"
}
]
},
"name": "finalize_allocation",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "3286:6:4",
"type": ""
},
{
"name": "size",
"nodeType": "YulTypedName",
"src": "3294:4:4",
"type": ""
}
],
"src": "3257:281:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3572:152:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3589:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3592:77:4",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3582:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3582:88:4"
},
"nodeType": "YulExpressionStatement",
"src": "3582:88:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3686:1:4",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3689:4:4",
"type": "",
"value": "0x41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3679:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3679:15:4"
},
"nodeType": "YulExpressionStatement",
"src": "3679:15:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3710:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3713:4:4",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3703:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3703:15:4"
},
"nodeType": "YulExpressionStatement",
"src": "3703:15:4"
}
]
},
"name": "panic_error_0x41",
"nodeType": "YulFunctionDefinition",
"src": "3544:180:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3778:54:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3788:38:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3806:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3813:2:4",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3802:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3802:14:4"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3822:2:4",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "3818:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3818:7:4"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3798:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3798:28:4"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "3788:6:4"
}
]
}
]
},
"name": "round_up_to_mul_of_32",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3761:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "3771:6:4",
"type": ""
}
],
"src": "3730:102:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3881:79:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "3938:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3947:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3950:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3940:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3940:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "3940:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3904:5:4"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3929:5:4"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "3911:17:4"
},
"nodeType": "YulFunctionCall",
"src": "3911:24:4"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "3901:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3901:35:4"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "3894:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3894:43:4"
},
"nodeType": "YulIf",
"src": "3891:2:4"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3874:5:4",
"type": ""
}
],
"src": "3838:122:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4009:79:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "4066:16:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4075:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4078:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4068:6:4"
},
"nodeType": "YulFunctionCall",
"src": "4068:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "4068:12:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4032:5:4"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4057:5:4"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "4039:17:4"
},
"nodeType": "YulFunctionCall",
"src": "4039:24:4"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "4029:2:4"
},
"nodeType": "YulFunctionCall",
"src": "4029:35:4"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "4022:6:4"
},
"nodeType": "YulFunctionCall",
"src": "4022:43:4"
},
"nodeType": "YulIf",
"src": "4019:2:4"
}
]
},
"name": "validator_revert_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4002:5:4",
"type": ""
}
],
"src": "3966:122:4"
}
]
},
"contents": "{\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert(0, 0) }\n copy_calldata_to_memory(src, dst, length)\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_bytes4_to_t_bytes4_fromStack(value, pos) {\n mstore(pos, cleanup_t_bytes4(value))\n }\n\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bytes4_to_t_bytes4_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_bytes4(value) -> cleaned {\n cleaned := and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n",
"id": 4,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063150b7a0214610030575b600080fd5b61004a60048036038101906100459190610106565b610060565b6040516100579190610190565b60405180910390f35b600063150b7a0260e01b9050949350505050565b6000610087610082846101d0565b6101ab565b90508281526020810184848401111561009f57600080fd5b6100aa848285610269565b509392505050565b6000813590506100c1816102e9565b92915050565b600082601f8301126100d857600080fd5b81356100e8848260208601610074565b91505092915050565b60008135905061010081610300565b92915050565b6000806000806080858703121561011c57600080fd5b600061012a878288016100b2565b945050602061013b878288016100b2565b935050604061014c878288016100f1565b925050606085013567ffffffffffffffff81111561016957600080fd5b610175878288016100c7565b91505092959194509250565b61018a81610213565b82525050565b60006020820190506101a56000830184610181565b92915050565b60006101b56101c6565b90506101c18282610278565b919050565b6000604051905090565b600067ffffffffffffffff8211156101eb576101ea6102a9565b5b6101f4826102d8565b9050602081019050919050565b600061020c8261023f565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b610281826102d8565b810181811067ffffffffffffffff821117156102a05761029f6102a9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6102f281610201565b81146102fd57600080fd5b50565b6103098161025f565b811461031457600080fd5b5056fea2646970667358221220cc98a2abed81e1492dd64fbea2da837f4ffcc94d267efa7c3a3e7d19d4100c8764736f6c63430008040033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x190 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH4 0x150B7A02 PUSH1 0xE0 SHL SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x87 PUSH2 0x82 DUP5 PUSH2 0x1D0 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAA DUP5 DUP3 DUP6 PUSH2 0x269 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC1 DUP2 PUSH2 0x2E9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE8 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x74 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x100 DUP2 PUSH2 0x300 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x12A DUP8 DUP3 DUP9 ADD PUSH2 0xB2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x13B DUP8 DUP3 DUP9 ADD PUSH2 0xB2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x14C DUP8 DUP3 DUP9 ADD PUSH2 0xF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x175 DUP8 DUP3 DUP9 ADD PUSH2 0xC7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x18A DUP2 PUSH2 0x213 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1A5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x181 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B5 PUSH2 0x1C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1C1 DUP3 DUP3 PUSH2 0x278 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1EB JUMPI PUSH2 0x1EA PUSH2 0x2A9 JUMP JUMPDEST JUMPDEST PUSH2 0x1F4 DUP3 PUSH2 0x2D8 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20C DUP3 PUSH2 0x23F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH2 0x281 DUP3 PUSH2 0x2D8 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2A0 JUMPI PUSH2 0x29F PUSH2 0x2A9 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2F2 DUP2 PUSH2 0x201 JUMP JUMPDEST DUP2 EQ PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x309 DUP2 PUSH2 0x25F JUMP JUMPDEST DUP2 EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC SWAP9 LOG2 0xAB 0xED DUP2 0xE1 0x49 0x2D 0xD6 0x4F 0xBE LOG2 0xDA DUP4 PUSH32 0x4FFCC94D267EFA7C3A3E7D19D4100C8764736F6C634300080400330000000000 ",
"sourceMap": "466:639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;872:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;1010:6;1035:30;;;1028:37;;872:200;;;;;;:::o;7:343:4:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;514:271::-;569:5;618:3;611:4;603:6;599:17;595:27;585:2;;636:1;633;626:12;585:2;676:6;663:20;701:78;775:3;767:6;760:4;752:6;748:17;701:78;:::i;:::-;692:87;;575:210;;;;;:::o;791:139::-;837:5;875:6;862:20;853:29;;891:33;918:5;891:33;:::i;:::-;843:87;;;;:::o;936:809::-;1031:6;1039;1047;1055;1104:3;1092:9;1083:7;1079:23;1075:33;1072:2;;;1121:1;1118;1111:12;1072:2;1164:1;1189:53;1234:7;1225:6;1214:9;1210:22;1189:53;:::i;:::-;1179:63;;1135:117;1291:2;1317:53;1362:7;1353:6;1342:9;1338:22;1317:53;:::i;:::-;1307:63;;1262:118;1419:2;1445:53;1490:7;1481:6;1470:9;1466:22;1445:53;:::i;:::-;1435:63;;1390:118;1575:2;1564:9;1560:18;1547:32;1606:18;1598:6;1595:30;1592:2;;;1638:1;1635;1628:12;1592:2;1666:62;1720:7;1711:6;1700:9;1696:22;1666:62;:::i;:::-;1656:72;;1518:220;1062:683;;;;;;;:::o;1751:115::-;1836:23;1853:5;1836:23;:::i;:::-;1831:3;1824:36;1814:52;;:::o;1872:218::-;1963:4;2001:2;1990:9;1986:18;1978:26;;2014:69;2080:1;2069:9;2065:17;2056:6;2014:69;:::i;:::-;1968:122;;;;:::o;2096:129::-;2130:6;2157:20;;:::i;:::-;2147:30;;2186:33;2214:4;2206:6;2186:33;:::i;:::-;2137:88;;;:::o;2231:75::-;2264:6;2297:2;2291:9;2281:19;;2271:35;:::o;2312:307::-;2373:4;2463:18;2455:6;2452:30;2449:2;;;2485:18;;:::i;:::-;2449:2;2523:29;2545:6;2523:29;:::i;:::-;2515:37;;2607:4;2601;2597:15;2589:23;;2378:241;;;:::o;2625:96::-;2662:7;2691:24;2709:5;2691:24;:::i;:::-;2680:35;;2670:51;;;:::o;2727:149::-;2763:7;2803:66;2796:5;2792:78;2781:89;;2771:105;;;:::o;2882:126::-;2919:7;2959:42;2952:5;2948:54;2937:65;;2927:81;;;:::o;3014:77::-;3051:7;3080:5;3069:16;;3059:32;;;:::o;3097:154::-;3181:6;3176:3;3171;3158:30;3243:1;3234:6;3229:3;3225:16;3218:27;3148:103;;;:::o;3257:281::-;3340:27;3362:4;3340:27;:::i;:::-;3332:6;3328:40;3470:6;3458:10;3455:22;3434:18;3422:10;3419:34;3416:62;3413:2;;;3481:18;;:::i;:::-;3413:2;3521:10;3517:2;3510:22;3300:238;;;:::o;3544:180::-;3592:77;3589:1;3582:88;3689:4;3686:1;3679:15;3713:4;3710:1;3703:15;3730:102;3771:6;3822:2;3818:7;3813:2;3806:5;3802:14;3798:28;3788:38;;3778:54;;;:::o;3838:122::-;3911:24;3929:5;3911:24;:::i;:::-;3904:5;3901:35;3891:2;;3950:1;3947;3940:12;3891:2;3881:79;:::o;3966:122::-;4039:24;4057:5;4039:24;:::i;:::-;4032:5;4029:35;4019:2;;4078:1;4075;4068:12;4019:2;4009:79;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "169000",
"executionCost": "214",
"totalCost": "169214"
},
"external": {
"onERC721Received(address,address,uint256,bytes)": "infinite"
},
"internal": {
"__ERC721Holder_init()": "infinite",
"__ERC721Holder_init_unchained()": "infinite"
}
},
"methodIdentifiers": {
"onERC721Received(address,address,uint256,bytes)": "150b7a02"
}
},
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.4+commit.c7e474f2"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Implementation of the {IERC721Receiver} interface. Accepts all token transfers. Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.",
"kind": "dev",
"methods": {
"onERC721Received(address,address,uint256,bytes)": {
"details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"fractionalArt/ERC721HolderUpgradeable.sol": "ERC721HolderUpgradeable"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"fractionalArt/ERC721HolderUpgradeable.sol": {
"keccak256": "0xa90ba0d86644585c5d9f6d81c8a8bdca93e3bbc69a679f9ab917b01be42c9502",
"license": "MIT",
"urls": [
"bzz-raw://c0f63626509e863e701c2e884c1866c5b57bd5f120b6acce38a275111d04bb92",
"dweb:/ipfs/QmQsePDv1oJ12mCnrhMvLXDbbg1VBT383NqLYAh6FB312B"
]
},
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": {
"keccak256": "0x45939090956d43db0c9a22a06d82b60fed9e24d12c7d01f57a97c870cc134636",
"license": "MIT",
"urls": [
"bzz-raw://9a96316f2a4e4a5101293223bfb68efdb0ca91245bead8cebb66087d663fd173",
"dweb:/ipfs/QmYyvEafy4sQNqCqPKZcWmSTApZ4h6auurwU3UQmtVrnX2"
]
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol": {
"keccak256": "0x98715cf174afc65e83085bd972f70336b7be67cff174d3fe6b42554625e24ae6",
"license": "MIT",
"urls": [
"bzz-raw://2feaab6a982342b18e931689b6435ec4730740ce4f45d019417491b72a6ce035",
"dweb:/ipfs/QmNvwGLGNU1PrrfoDLrSoKtnzzeyopGXAwD5rATF185rjw"
]
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol": {
"keccak256": "0x68404b57d114b893554b0e54334b32f578f5d1abf61830025c83fb71dc1944ce",
"license": "MIT",
"urls": [
"bzz-raw://d3d0a94b3c8afd92c2a9f03f3325e9ac22cec56e995b94ff212670ff3653f0d3",
"dweb:/ipfs/QmPqKWUysbo8QqKcqH5Lp7SQiL1LfjeoGCSa7iFWmAP8Mw"
]
}
},
"version": 1
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./Interfaces/IERC721ReceiverUpgradeable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/Initializable.sol";
/**
* @dev Implementation of the {IERC721Receiver} interface.
*
* Accepts all token transfers.
* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
*/
contract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {
function __ERC721Holder_init() internal initializer {
__ERC721Holder_init_unchained();
}
function __ERC721Holder_init_unchained() internal initializer {
}
/**
* @dev See {IERC721Receiver-onERC721Received}.
*
* Always returns `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address,
address,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC721Received.selector;
}
uint256[50] private __gap;
}
{
"id": "ddb68809e7df963caf508aae66dedda0",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.4",
"solcLongVersion": "0.8.4+commit.c7e474f2",
"input": {
"language": "Solidity",
"sources": {
"fractionalArt/Interfaces/ISettings.sol": {
"content": "//SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface ISettings {\n\n function maxAuctionLength() external returns(uint256);\n\n function minAuctionLength() external returns(uint256);\n\n function maxCuratorFee() external returns(uint256);\n\n function governanceFee() external returns(uint256);\n\n function minBidIncrease() external returns(uint256);\n\n function minVotePercentage() external returns(uint256);\n\n function maxReserveFactor() external returns(uint256);\n\n function minReserveFactor() external returns(uint256);\n\n function feeReceiver() external returns(address payable);\n\n}"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"fractionalArt/Interfaces/ISettings.sol": {
"ISettings": {
"abi": [
{
"inputs": [],
"name": "feeReceiver",
"outputs": [
{
"internalType": "address payable",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "governanceFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxAuctionLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxCuratorFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxReserveFactor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minAuctionLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minBidIncrease",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minReserveFactor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minVotePercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"feeReceiver()": "b3f00674",
"governanceFee()": "0ea90a12",
"maxAuctionLength()": "0e519ef9",
"maxCuratorFee()": "8a364bc1",
"maxReserveFactor()": "5410bfc9",
"minAuctionLength()": "a0b335e3",
"minBidIncrease()": "7c513c0f",
"minReserveFactor()": "09990a96",
"minVotePercentage()": "32977c73"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"feeReceiver\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAuctionLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxCuratorFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxReserveFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minAuctionLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minBidIncrease\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minReserveFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minVotePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"fractionalArt/Interfaces/ISettings.sol\":\"ISettings\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"fractionalArt/Interfaces/ISettings.sol\":{\"keccak256\":\"0x4530040876f33b7afaa3699161aa3cbe7b1dae23e1d362a16d0f51df2ed1ebb3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9fd6bebffa3a1d71e2040b15a9d5e089b2bacc5d08f6d6c7eba27faded9abb4e\",\"dweb:/ipfs/QmfPotec2fPdsUTMh4EEe1LPcGJK5xBk3vv3zGKcXtg9TX\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"sources": {
"fractionalArt/Interfaces/ISettings.sol": {
"ast": {
"absolutePath": "fractionalArt/Interfaces/ISettings.sol",
"exportedSymbols": {
"ISettings": [
47
]
},
"id": 48,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "31:23:0"
},
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "interface",
"fullyImplemented": false,
"id": 47,
"linearizedBaseContracts": [
47
],
"name": "ISettings",
"nameLocation": "66:9:0",
"nodeType": "ContractDefinition",
"nodes": [
{
"functionSelector": "0e519ef9",
"id": 6,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "maxAuctionLength",
"nameLocation": "92:16:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2,
"nodeType": "ParameterList",
"parameters": [],
"src": "108:2:0"
},
"returnParameters": {
"id": 5,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 4,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 6,
"src": "128:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 3,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "128:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "127:9:0"
},
"scope": 47,
"src": "83:54:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "a0b335e3",
"id": 11,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "minAuctionLength",
"nameLocation": "152:16:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 7,
"nodeType": "ParameterList",
"parameters": [],
"src": "168:2:0"
},
"returnParameters": {
"id": 10,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 11,
"src": "188:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 8,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "188:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "187:9:0"
},
"scope": 47,
"src": "143:54:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "8a364bc1",
"id": 16,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "maxCuratorFee",
"nameLocation": "212:13:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 12,
"nodeType": "ParameterList",
"parameters": [],
"src": "225:2:0"
},
"returnParameters": {
"id": 15,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 14,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 16,
"src": "245:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 13,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "245:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "244:9:0"
},
"scope": 47,
"src": "203:51:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "0ea90a12",
"id": 21,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "governanceFee",
"nameLocation": "269:13:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 17,
"nodeType": "ParameterList",
"parameters": [],
"src": "282:2:0"
},
"returnParameters": {
"id": 20,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 21,
"src": "302:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 18,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "302:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "301:9:0"
},
"scope": 47,
"src": "260:51:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "7c513c0f",
"id": 26,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "minBidIncrease",
"nameLocation": "326:14:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 22,
"nodeType": "ParameterList",
"parameters": [],
"src": "340:2:0"
},
"returnParameters": {
"id": 25,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 24,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 26,
"src": "360:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 23,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "360:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "359:9:0"
},
"scope": 47,
"src": "317:52:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "32977c73",
"id": 31,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "minVotePercentage",
"nameLocation": "384:17:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 27,
"nodeType": "ParameterList",
"parameters": [],
"src": "401:2:0"
},
"returnParameters": {
"id": 30,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 29,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 31,
"src": "421:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 28,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "421:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "420:9:0"
},
"scope": 47,
"src": "375:55:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "5410bfc9",
"id": 36,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "maxReserveFactor",
"nameLocation": "445:16:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 32,
"nodeType": "ParameterList",
"parameters": [],
"src": "461:2:0"
},
"returnParameters": {
"id": 35,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 34,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 36,
"src": "481:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 33,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "481:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "480:9:0"
},
"scope": 47,
"src": "436:54:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "09990a96",
"id": 41,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "minReserveFactor",
"nameLocation": "505:16:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 37,
"nodeType": "ParameterList",
"parameters": [],
"src": "521:2:0"
},
"returnParameters": {
"id": 40,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 39,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 41,
"src": "541:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 38,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "541:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "540:9:0"
},
"scope": 47,
"src": "496:54:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "b3f00674",
"id": 46,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "feeReceiver",
"nameLocation": "565:11:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 42,
"nodeType": "ParameterList",
"parameters": [],
"src": "576:2:0"
},
"returnParameters": {
"id": 45,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 44,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 46,
"src": "596:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 43,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "596:15:0",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"visibility": "internal"
}
],
"src": "595:17:0"
},
"scope": 47,
"src": "556:57:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
}
],
"scope": 48,
"src": "56:560:0",
"usedErrors": []
}
],
"src": "31:585:0"
},
"id": 0
}
}
}
}
{
"id": "edc2b827f9ed49bcd705ea6313b8e0df",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.4",
"solcLongVersion": "0.8.4+commit.c7e474f2",
"input": {
"language": "Solidity",
"sources": {
"fractionalArt/Interfaces/IWETH.sol": {
"content": "//SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IWETH {\n\n function deposit() external payable;\n\n function withdraw(uint) external;\n\n function approve(address, uint) external returns(bool);\n\n function transfer(address, uint) external returns(bool);\n\n function transferFrom(address, address, uint) external returns(bool);\n\n function balanceOf(address) external view returns(uint);\n\n}"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"fractionalArt/Interfaces/IWETH.sol": {
"IWETH": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"deposit()": "d0e30db0",
"transfer(address,uint256)": "a9059cbb",
"transferFrom(address,address,uint256)": "23b872dd",
"withdraw(uint256)": "2e1a7d4d"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"fractionalArt/Interfaces/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"fractionalArt/Interfaces/IWETH.sol\":{\"keccak256\":\"0x570ca851d2a61c7b07d103e0d3cd1a818c797198ac4b7535ffa108e40c49c9c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a7e4009fa8587088ef5cd6da479f69491bd8e3b998a7a3ed206f4ec242650b20\",\"dweb:/ipfs/QmaTBVPzcAe6mKjLEuMy5r2mWehYAwomcFRyjiUS5Eyztr\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"sources": {
"fractionalArt/Interfaces/IWETH.sol": {
"ast": {
"absolutePath": "fractionalArt/Interfaces/IWETH.sol",
"exportedSymbols": {
"IWETH": [
46
]
},
"id": 47,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "31:23:0"
},
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "interface",
"fullyImplemented": false,
"id": 46,
"linearizedBaseContracts": [
46
],
"name": "IWETH",
"nameLocation": "66:5:0",
"nodeType": "ContractDefinition",
"nodes": [
{
"functionSelector": "d0e30db0",
"id": 4,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "deposit",
"nameLocation": "88:7:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2,
"nodeType": "ParameterList",
"parameters": [],
"src": "95:2:0"
},
"returnParameters": {
"id": 3,
"nodeType": "ParameterList",
"parameters": [],
"src": "114:0:0"
},
"scope": 46,
"src": "79:36:0",
"stateMutability": "payable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "2e1a7d4d",
"id": 9,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "withdraw",
"nameLocation": "130:8:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 7,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 6,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 9,
"src": "139:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 5,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "139:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "138:6:0"
},
"returnParameters": {
"id": 8,
"nodeType": "ParameterList",
"parameters": [],
"src": "153:0:0"
},
"scope": 46,
"src": "121:33:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "095ea7b3",
"id": 18,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "approve",
"nameLocation": "169:7:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 14,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 11,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 18,
"src": "177:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 10,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "177:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 13,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 18,
"src": "186:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 12,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "186:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "176:15:0"
},
"returnParameters": {
"id": 17,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 16,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 18,
"src": "209:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 15,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "209:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "208:6:0"
},
"scope": 46,
"src": "160:55:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "a9059cbb",
"id": 27,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "transfer",
"nameLocation": "230:8:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 23,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 20,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 27,
"src": "239:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 19,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "239:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 22,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 27,
"src": "248:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 21,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "248:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "238:15:0"
},
"returnParameters": {
"id": 26,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 25,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 27,
"src": "271:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 24,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "271:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "270:6:0"
},
"scope": 46,
"src": "221:56:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "23b872dd",
"id": 38,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "transferFrom",
"nameLocation": "292:12:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 34,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 29,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 38,
"src": "305:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 28,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "305:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 31,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 38,
"src": "314:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 30,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "314:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 33,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 38,
"src": "323:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 32,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "323:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "304:24:0"
},
"returnParameters": {
"id": 37,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 36,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 38,
"src": "346:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 35,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "346:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "345:6:0"
},
"scope": 46,
"src": "283:69:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"functionSelector": "70a08231",
"id": 45,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "balanceOf",
"nameLocation": "367:9:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 41,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 40,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 45,
"src": "377:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 39,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "377:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "376:9:0"
},
"returnParameters": {
"id": 44,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 43,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 45,
"src": "408:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 42,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "408:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "407:6:0"
},
"scope": 46,
"src": "358:56:0",
"stateMutability": "view",
"virtual": false,
"visibility": "external"
}
],
"scope": 47,
"src": "56:361:0",
"usedErrors": []
}
],
"src": "31:386:0"
},
"id": 0
}
}
}
}
{
"id": "f1e1a28a5437eea23f02b00767aad143",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.0",
"solcLongVersion": "0.8.0+commit.c7dfd78e",
"input": {
"language": "Solidity",
"sources": {
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\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 IERC721ReceiverUpgradeable {\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 reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(\n address operator,\n address from,\n uint256 tokenId,\n bytes calldata data\n ) external returns (bytes4);\n}"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": {
"IERC721ReceiverUpgradeable": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.",
"kind": "dev",
"methods": {
"onERC721Received(address,address,uint256,bytes)": {
"details": "Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
}
},
"title": "ERC721 token receiver interface",
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"onERC721Received(address,address,uint256,bytes)": "150b7a02"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.0+commit.c7dfd78e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\"}},\"title\":\"ERC721 token receiver interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol\":\"IERC721ReceiverUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol\":{\"keccak256\":\"0x45939090956d43db0c9a22a06d82b60fed9e24d12c7d01f57a97c870cc134636\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9a96316f2a4e4a5101293223bfb68efdb0ca91245bead8cebb66087d663fd173\",\"dweb:/ipfs/QmYyvEafy4sQNqCqPKZcWmSTApZ4h6auurwU3UQmtVrnX2\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"sources": {
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": {
"ast": {
"absolutePath": "fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol",
"exportedSymbols": {
"IERC721ReceiverUpgradeable": [
17
]
},
"id": 18,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "33:23:0"
},
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "interface",
"documentation": {
"id": 2,
"nodeType": "StructuredDocumentation",
"src": "58:152:0",
"text": " @title ERC721 token receiver interface\n @dev Interface for any contract that wants to support safeTransfers\n from ERC721 asset contracts."
},
"fullyImplemented": false,
"id": 17,
"linearizedBaseContracts": [
17
],
"name": "IERC721ReceiverUpgradeable",
"nodeType": "ContractDefinition",
"nodes": [
{
"documentation": {
"id": 3,
"nodeType": "StructuredDocumentation",
"src": "254:485:0",
"text": " @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n by `operator` from `from`, this function is called.\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 reverted.\n The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
},
"functionSelector": "150b7a02",
"id": 16,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "onERC721Received",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 12,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 5,
"mutability": "mutable",
"name": "operator",
"nodeType": "VariableDeclaration",
"scope": 16,
"src": "779:16:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 4,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "779:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 7,
"mutability": "mutable",
"name": "from",
"nodeType": "VariableDeclaration",
"scope": 16,
"src": "805:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 6,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "805:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 9,
"mutability": "mutable",
"name": "tokenId",
"nodeType": "VariableDeclaration",
"scope": 16,
"src": "827:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 8,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "827:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 11,
"mutability": "mutable",
"name": "data",
"nodeType": "VariableDeclaration",
"scope": 16,
"src": "852:19:0",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 10,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "852:5:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "769:108:0"
},
"returnParameters": {
"id": 15,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 14,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"scope": 16,
"src": "896:6:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 13,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "896:6:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"visibility": "internal"
}
],
"src": "895:8:0"
},
"scope": 17,
"src": "744:160:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
}
],
"scope": 18,
"src": "211:695:0"
}
],
"src": "33:873:0"
},
"id": 0
}
}
}
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"onERC721Received(address,address,uint256,bytes)": "150b7a02"
}
},
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.0+commit.c7dfd78e"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "onERC721Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.",
"kind": "dev",
"methods": {
"onERC721Received(address,address,uint256,bytes)": {
"details": "Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
}
},
"title": "ERC721 token receiver interface",
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": "IERC721ReceiverUpgradeable"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"fractionalArt/Interfaces/IERC721ReceiverUpgradeable.sol": {
"keccak256": "0x45939090956d43db0c9a22a06d82b60fed9e24d12c7d01f57a97c870cc134636",
"license": "MIT",
"urls": [
"bzz-raw://9a96316f2a4e4a5101293223bfb68efdb0ca91245bead8cebb66087d663fd173",
"dweb:/ipfs/QmYyvEafy4sQNqCqPKZcWmSTApZ4h6auurwU3UQmtVrnX2"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"feeReceiver()": "b3f00674",
"governanceFee()": "0ea90a12",
"maxAuctionLength()": "0e519ef9",
"maxCuratorFee()": "8a364bc1",
"maxReserveFactor()": "5410bfc9",
"minAuctionLength()": "a0b335e3",
"minBidIncrease()": "7c513c0f",
"minReserveFactor()": "09990a96",
"minVotePercentage()": "32977c73"
}
},
"abi": [
{
"inputs": [],
"name": "feeReceiver",
"outputs": [
{
"internalType": "address payable",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "governanceFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxAuctionLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxCuratorFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxReserveFactor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minAuctionLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minBidIncrease",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minReserveFactor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minVotePercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.4+commit.c7e474f2"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"name": "feeReceiver",
"outputs": [
{
"internalType": "address payable",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "governanceFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxAuctionLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxCuratorFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxReserveFactor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minAuctionLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minBidIncrease",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minReserveFactor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minVotePercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"fractionalArt/Interfaces/ISettings.sol": "ISettings"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"fractionalArt/Interfaces/ISettings.sol": {
"keccak256": "0x4530040876f33b7afaa3699161aa3cbe7b1dae23e1d362a16d0f51df2ed1ebb3",
"license": "MIT",
"urls": [
"bzz-raw://9fd6bebffa3a1d71e2040b15a9d5e089b2bacc5d08f6d6c7eba27faded9abb4e",
"dweb:/ipfs/QmfPotec2fPdsUTMh4EEe1LPcGJK5xBk3vv3zGKcXtg9TX"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"deposit()": "d0e30db0",
"transfer(address,uint256)": "a9059cbb",
"transferFrom(address,address,uint256)": "23b872dd",
"withdraw(uint256)": "2e1a7d4d"
}
},
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.4+commit.c7e474f2"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"fractionalArt/Interfaces/IWETH.sol": "IWETH"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"fractionalArt/Interfaces/IWETH.sol": {
"keccak256": "0x570ca851d2a61c7b07d103e0d3cd1a818c797198ac4b7535ffa108e40c49c9c0",
"license": "MIT",
"urls": [
"bzz-raw://a7e4009fa8587088ef5cd6da479f69491bd8e3b998a7a3ed206f4ec242650b20",
"dweb:/ipfs/QmaTBVPzcAe6mKjLEuMy5r2mWehYAwomcFRyjiUS5Eyztr"
]
}
},
"version": 1
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721ReceiverUpgradeable {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface ISettings {
function maxAuctionLength() external returns(uint256);
function minAuctionLength() external returns(uint256);
function maxCuratorFee() external returns(uint256);
function governanceFee() external returns(uint256);
function minBidIncrease() external returns(uint256);
function minVotePercentage() external returns(uint256);
function maxReserveFactor() external returns(uint256);
function minReserveFactor() external returns(uint256);
function feeReceiver() external returns(address payable);
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IWETH {
function deposit() external payable;
function withdraw(uint) external;
function approve(address, uint) external returns(bool);
function transfer(address, uint) external returns(bool);
function transferFrom(address, address, uint) external returns(bool);
function balanceOf(address) external view returns(uint);
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/access/Ownable.sol";
import "./Interfaces/ISettings.sol";
contract Settings is Ownable, ISettings {
/// @notice the maximum auction length
uint256 public override maxAuctionLength;
/// @notice the longest an auction can ever be
uint256 public constant maxMaxAuctionLength = 8 weeks;
/// @notice the minimum auction length
uint256 public override minAuctionLength;
/// @notice the shortest an auction can ever be
uint256 public constant minMinAuctionLength = 0;
/// @notice governance fee max
uint256 public override governanceFee;
/// @notice 10% fee is max
uint256 public constant maxGovFee = 100;
/// @notice max curator fee
uint256 public override maxCuratorFee;
/// @notice the % bid increase required for a new bid
uint256 public override minBidIncrease;
/// @notice 10% bid increase is max
uint256 public constant maxMinBidIncrease = 100;
/// @notice 1% bid increase is min
uint256 public constant minMinBidIncrease = 10;
/// @notice the % of tokens required to be voting for an auction to start
uint256 public override minVotePercentage;
/// @notice the max % increase over the initial
uint256 public override maxReserveFactor;
/// @notice the max % decrease from the initial
uint256 public override minReserveFactor;
/// @notice the address who receives auction fees
address payable public override feeReceiver;
event UpdateMaxAuctionLength(uint256 _old, uint256 _new);
event UpdateMinAuctionLength(uint256 _old, uint256 _new);
event UpdateGovernanceFee(uint256 _old, uint256 _new);
event UpdateCuratorFee(uint256 _old, uint256 _new);
event UpdateMinBidIncrease(uint256 _old, uint256 _new);
event UpdateMinVotePercentage(uint256 _old, uint256 _new);
event UpdateMaxReserveFactor(uint256 _old, uint256 _new);
event UpdateMinReserveFactor(uint256 _old, uint256 _new);
event UpdateFeeReceiver(address _old, address _new);
constructor() {
maxAuctionLength = 2 weeks;
minAuctionLength = 1;
feeReceiver = payable(msg.sender);
minReserveFactor = 500; // 50%
maxReserveFactor = 2000; // 200%
minBidIncrease = 50; // 5%
maxCuratorFee = 100;
minVotePercentage = 500; // 50%
}
function setMaxAuctionLength(uint256 _length) external onlyOwner {
require(_length <= maxMaxAuctionLength, "max auction length too high");
require(_length > minAuctionLength, "max auction length too low");
emit UpdateMaxAuctionLength(maxAuctionLength, _length);
maxAuctionLength = _length;
}
function setMinAuctionLength(uint256 _length) external onlyOwner {
require(_length >= minMinAuctionLength, "min auction length too low");
require(_length < maxAuctionLength, "min auction length too high");
emit UpdateMinAuctionLength(minAuctionLength, _length);
minAuctionLength = _length;
}
function setGovernanceFee(uint256 _fee) external onlyOwner {
require(_fee <= maxGovFee, "fee too high");
emit UpdateGovernanceFee(governanceFee, _fee);
governanceFee = _fee;
}
function setMaxCuratorFee(uint256 _fee) external onlyOwner {
emit UpdateCuratorFee(governanceFee, _fee);
maxCuratorFee = _fee;
}
function setMinBidIncrease(uint256 _min) external onlyOwner {
require(_min <= maxMinBidIncrease, "min bid increase too high");
require(_min >= minMinBidIncrease, "min bid increase too low");
emit UpdateMinBidIncrease(minBidIncrease, _min);
minBidIncrease = _min;
}
function setMinVotePercentage(uint256 _min) external onlyOwner {
// 1000 is 100%
require(_min <= 1000, "min vote percentage too high");
emit UpdateMinVotePercentage(minVotePercentage, _min);
minVotePercentage = _min;
}
function setMaxReserveFactor(uint256 _factor) external onlyOwner {
require(_factor > minReserveFactor, "max reserve factor too low");
emit UpdateMaxReserveFactor(maxReserveFactor, _factor);
maxReserveFactor = _factor;
}
function setMinReserveFactor(uint256 _factor) external onlyOwner {
require(_factor < maxReserveFactor, "min reserve factor too high");
emit UpdateMinReserveFactor(minReserveFactor, _factor);
minReserveFactor = _factor;
}
function setFeeReceiver(address payable _receiver) external onlyOwner {
require(_receiver != address(0), "fees cannot go to 0 address");
emit UpdateFeeReceiver(feeReceiver, _receiver);
feeReceiver = _receiver;
}
}
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./Interfaces/IWETH.sol";
import "@openzeppelin/math/Math.sol";
import "@openzeppelin/token/ERC20/ERC20.sol";
import "@openzeppelin/token/ERC721/ERC721.sol";
import "@openzeppelin/token/ERC721/ERC721Holder.sol";
import "./Settings.sol";
import "@openzeppelin/upgradeable/token/ERC721/utils/ERC721HolderUpgradeable.sol";
import "@openzeppelin/token/ERC20/ERC20Upgradeable.sol";
contract TokenVault is ERC20Upgradeable, ERC721HolderUpgradeable {
using Address for address;
/// -----------------------------------
/// -------- BASIC INFORMATION --------
/// -----------------------------------
/// @notice weth address
address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
/// -----------------------------------
/// -------- TOKEN INFORMATION --------
/// -----------------------------------
/// @notice the ERC721 token address of the vault's token
address public token;
/// @notice the ERC721 token ID of the vault's token
uint256 public id;
/// -------------------------------------
/// -------- AUCTION INFORMATION --------
/// -------------------------------------
/// @notice the unix timestamp end time of the token auction
uint256 public auctionEnd;
/// @notice the length of auctions
uint256 public auctionLength;
/// @notice reservePrice * votingTokens
uint256 public reserveTotal;
/// @notice the current price of the token during an auction
uint256 public livePrice;
/// @notice the current user winning the token auction
address payable public winning;
enum State { inactive, live, ended, redeemed }
State public auctionState;
/// -----------------------------------
/// -------- VAULT INFORMATION --------
/// -----------------------------------
string public constant version = "1.1";
/// @notice the governance contract which gets paid in ETH
address public immutable settings;
/// @notice the address who initially deposited the NFT
address public curator;
/// @notice the AUM fee paid to the curator yearly. 3 decimals. ie. 100 = 10%
uint256 public fee;
/// @notice the last timestamp where fees were claimed
uint256 public lastClaimed;
/// @notice a boolean to indicate if the vault has closed
bool public vaultClosed;
/// @notice the number of ownership tokens voting on the reserve price at any given time
uint256 public votingTokens;
/// @notice a mapping of users to their desired token price
mapping(address => uint256) public userPrices;
/// ------------------------
/// -------- EVENTS --------
/// ------------------------
/// @notice An event emitted when a user updates their price
event PriceUpdate(address indexed user, uint price);
/// @notice An event emitted when an auction starts
event Start(address indexed buyer, uint price);
/// @notice An event emitted when a bid is made
event Bid(address indexed buyer, uint price);
/// @notice An event emitted when an auction is won
event Won(address indexed buyer, uint price);
/// @notice An event emitted when someone redeems all tokens for the NFT
event Redeem(address indexed redeemer);
/// @notice An event emitted when someone cashes in ERC20 tokens for ETH from an ERC721 token sale
event Cash(address indexed owner, uint256 shares);
event UpdateAuctionLength(uint256 length);
event UpdateCuratorFee(uint256 fee);
event FeeClaimed(uint256 fee);
constructor(address _settings) {
settings = _settings;
}
function initialize(address _curator, address _token, uint256 _id, uint256 _supply, uint256 _listPrice, uint256 _fee, string memory _name, string memory _symbol) external initializer {
// initialize inherited contracts
__ERC20_init(_name, _symbol);
__ERC721Holder_init();
// set storage variables
token = _token;
id = _id;
auctionLength = 3 days;
curator = _curator;
fee = _fee;
lastClaimed = block.timestamp;
auctionState = State.inactive;
userPrices[_curator] = _listPrice;
_mint(_curator, _supply);
}
/// --------------------------------
/// -------- VIEW FUNCTIONS --------
/// --------------------------------
function reservePrice() public view returns(uint256) {
return votingTokens == 0 ? 0 : reserveTotal / votingTokens;
}
/// -------------------------------
/// -------- GOV FUNCTIONS --------
/// -------------------------------
/// @notice allow governance to boot a bad actor curator
/// @param _curator the new curator
function kickCurator(address _curator) external {
require(msg.sender == Ownable(settings).owner(), "kick:not gov");
curator = _curator;
}
/// @notice allow governance to remove bad reserve prices
function removeReserve(address _user) external {
require(msg.sender == Ownable(settings).owner(), "remove:not gov");
require(auctionState == State.inactive, "update:auction live cannot update price");
uint256 old = userPrices[_user];
require(0 != old, "update:not an update");
uint256 weight = balanceOf(_user);
votingTokens -= weight;
reserveTotal -= weight * old;
userPrices[_user] = 0;
emit PriceUpdate(_user, 0);
}
/// -----------------------------------
/// -------- CURATOR FUNCTIONS --------
/// -----------------------------------
/// @notice allow curator to update the curator address
/// @param _curator the new curator
function updateCurator(address _curator) external {
require(msg.sender == curator, "update:not curator");
curator = _curator;
}
/// @notice allow curator to update the auction length
/// @param _length the new base price
function updateAuctionLength(uint256 _length) external {
require(msg.sender == curator, "update:not curator");
require(_length >= ISettings(settings).minAuctionLength() && _length <= ISettings(settings).maxAuctionLength(), "update:invalid auction length");
auctionLength = _length;
emit UpdateAuctionLength(_length);
}
/// @notice allow the curator to change their fee
/// @param _fee the new fee
function updateFee(uint256 _fee) external {
require(msg.sender == curator, "update:not curator");
require(_fee < fee, "update:can't raise");
require(_fee <= ISettings(settings).maxCuratorFee(), "update:cannot increase fee this high");
_claimFees();
fee = _fee;
emit UpdateCuratorFee(fee);
}
/// @notice external function to claim fees for the curator and governance
function claimFees() external {
_claimFees();
}
/// @dev interal fuction to calculate and mint fees
function _claimFees() internal {
require(auctionState != State.ended, "claim:cannot claim after auction ends");
// get how much in fees the curator would make in a year
uint256 currentAnnualFee = fee * totalSupply() / 1000;
// get how much that is per second;
uint256 feePerSecond = currentAnnualFee / 31536000;
// get how many seconds they are eligible to claim
uint256 sinceLastClaim = block.timestamp - lastClaimed;
// get the amount of tokens to mint
uint256 curatorMint = sinceLastClaim * feePerSecond;
// now lets do the same for governance
address govAddress = ISettings(settings).feeReceiver();
uint256 govFee = ISettings(settings).governanceFee();
currentAnnualFee = govFee * totalSupply() / 1000;
feePerSecond = currentAnnualFee / 31536000;
uint256 govMint = sinceLastClaim * feePerSecond;
lastClaimed = block.timestamp;
if (curator != address(0)) {
_mint(curator, curatorMint);
emit FeeClaimed(curatorMint);
}
if (govAddress != address(0)) {
_mint(govAddress, govMint);
emit FeeClaimed(govMint);
}
}
/// --------------------------------
/// -------- CORE FUNCTIONS --------
/// --------------------------------
/// @notice a function for an end user to update their desired sale price
/// @param _new the desired price in ETH
function updateUserPrice(uint256 _new) external {
require(auctionState == State.inactive, "update:auction live cannot update price");
uint256 old = userPrices[msg.sender];
require(_new != old, "update:not an update");
uint256 weight = balanceOf(msg.sender);
if (votingTokens == 0) {
votingTokens = weight;
reserveTotal = weight * _new;
}
// they are the only one voting
else if (weight == votingTokens && old != 0) {
reserveTotal = weight * _new;
}
// previously they were not voting
else if (old == 0) {
uint256 averageReserve = reserveTotal / votingTokens;
uint256 reservePriceMin = averageReserve * ISettings(settings).minReserveFactor() / 1000;
require(_new >= reservePriceMin, "update:reserve price too low");
uint256 reservePriceMax = averageReserve * ISettings(settings).maxReserveFactor() / 1000;
require(_new <= reservePriceMax, "update:reserve price too high");
votingTokens += weight;
reserveTotal += weight * _new;
}
// they no longer want to vote
else if (_new == 0) {
votingTokens -= weight;
reserveTotal -= weight * old;
}
// they are updating their vote
else {
uint256 averageReserve = (reserveTotal - (old * weight)) / (votingTokens - weight);
uint256 reservePriceMin = averageReserve * ISettings(settings).minReserveFactor() / 1000;
require(_new >= reservePriceMin, "update:reserve price too low");
uint256 reservePriceMax = averageReserve * ISettings(settings).maxReserveFactor() / 1000;
require(_new <= reservePriceMax, "update:reserve price too high");
reserveTotal = reserveTotal + (weight * _new) - (weight * old);
}
userPrices[msg.sender] = _new;
emit PriceUpdate(msg.sender, _new);
}
/// @notice an internal function used to update sender and receivers price on token transfer
/// @param _from the ERC20 token sender
/// @param _to the ERC20 token receiver
/// @param _amount the ERC20 token amount
function _beforeTokenTransfer(address _from, address _to, uint256 _amount) internal virtual override {
if (auctionState == State.inactive) {
uint256 fromPrice = userPrices[_from];
uint256 toPrice = userPrices[_to];
// only do something if users have different reserve price
if (toPrice != fromPrice) {
// new holder is not a voter
if (toPrice == 0) {
// get the average reserve price ignoring the senders amount
votingTokens -= _amount;
reserveTotal -= _amount * fromPrice;
}
// old holder is not a voter
else if (fromPrice == 0) {
votingTokens += _amount;
reserveTotal += _amount * toPrice;
}
// both holders are voters
else {
reserveTotal = reserveTotal + (_amount * toPrice) - (_amount * fromPrice);
}
}
}
}
/// @notice kick off an auction. Must send reservePrice in ETH
function start() external payable {
require(auctionState == State.inactive, "start:no auction starts");
require(msg.value >= reservePrice(), "start:too low bid");
require(votingTokens * 1000 >= ISettings(settings).minVotePercentage() * totalSupply(), "start:not enough voters");
auctionEnd = block.timestamp + auctionLength;
auctionState = State.live;
livePrice = msg.value;
winning = payable(msg.sender);
emit Start(msg.sender, msg.value);
}
/// @notice an external function to bid on purchasing the vaults NFT. The msg.value is the bid amount
function bid() external payable {
require(auctionState == State.live, "bid:auction is not live");
uint256 increase = ISettings(settings).minBidIncrease() + 1000;
require(msg.value * 1000 >= livePrice * increase, "bid:too low bid");
require(block.timestamp < auctionEnd, "bid:auction ended");
// If bid is within 15 minutes of auction end, extend auction
if (auctionEnd - block.timestamp <= 15 minutes) {
auctionEnd += 15 minutes;
}
_sendETHOrWETH(winning, livePrice);
livePrice = msg.value;
winning = payable(msg.sender);
emit Bid(msg.sender, msg.value);
}
/// @notice an external function to end an auction after the timer has run out
function end() external {
require(auctionState == State.live, "end:vault has already closed");
require(block.timestamp >= auctionEnd, "end:auction live");
_claimFees();
// transfer erc721 to winner
IERC721(token).transferFrom(address(this), winning, id);
auctionState = State.ended;
emit Won(winning, livePrice);
}
/// @notice an external function to burn all ERC20 tokens to receive the ERC721 token
function redeem() external {
require(auctionState == State.inactive, "redeem:no redeeming");
_burn(msg.sender, totalSupply());
// transfer erc721 to redeemer
IERC721(token).transferFrom(address(this), msg.sender, id);
auctionState = State.redeemed;
emit Redeem(msg.sender);
}
/// @notice an external function to burn ERC20 tokens to receive ETH from ERC721 token purchase
function cash() external {
require(auctionState == State.ended, "cash:vault not closed yet");
uint256 bal = balanceOf(msg.sender);
require(bal > 0, "cash:no tokens to cash out");
uint256 share = bal * address(this).balance / totalSupply();
_burn(msg.sender, bal);
_sendETHOrWETH(payable(msg.sender), share);
emit Cash(msg.sender, share);
}
// Will attempt to transfer ETH, but will transfer WETH instead if it fails.
function _sendETHOrWETH(address to, uint256 value) internal {
// Try to transfer ETH to the given recipient.
if (!_attemptETHTransfer(to, value)) {
// If the transfer fails, wrap and send as WETH, so that
// the auction is not impeded and the recipient still
// can claim ETH via the WETH contract (similar to escrow).
IWETH(weth).deposit{value: value}();
IWETH(weth).transfer(to, value);
// At this point, the recipient can unwrap WETH.
}
}
// Sending ETH is not guaranteed complete, and the method used here will return false if
// it fails. For example, a contract can block ETH transfer, or might use
// an excessive amount of gas, thereby griefing a new bidder.
// We should limit the gas used in transfers, and handle failure cases.
function _attemptETHTransfer(address to, uint256 value)
internal
returns (bool)
{
// Here increase the gas limit a reasonable amount above the default, and try
// to send ETH to the recipient.
// NOTE: This might allow the recipient to attempt a limited reentrancy attack.
(bool success, ) = to.call{value: value, gas: 30000}("");
return success;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment